我有一个数据帧列表,其中每个数据帧都有1或2行名为“ mis”或“ syn”(形成名为cat的列)以及第二个具有数字频率的列。我想填写每个数据帧,以便如果缺少“ mis”行,则添加频率为0的mis行 如果缺少“ syn”行,则添加频率为1的syn行:
###exmaple:
#example list of dataframes:
df1<- as.data.frame(cbind(cat = c("mis","syn"),freq= c(4,2)))
df2<- as.data.frame(cbind(cat = "mis",freq= 1))
df3<- as.data.frame(cbind(cat = "syn",freq= 2))
df_list<- list(df1 = df1,df2 = df2,df3= df3)
看起来像:
> df_list
$df1
cat freq
1 mis 4
2 syn 2
$df2
cat freq
1 mis 1
$df3
cat freq
1 syn 2
预期输出:
> df_list
$df1
cat freq
mis 4
syn 2
$df2
cat freq
mis 1
syn 1
$df3
cat freq
syn 2
mis 0
我尝试过的方法: 首先,我更改行名称,以便可以通过它们进行搜索
df_list_named<- lapply(df_list,function(x){ row.names(x)<-as.character(x$cat); x})
df_list_named
$df1
cat freq
mis mis 4
syn syn 2
$df2
cat freq
mis mis 1
$df3
cat freq
syn syn 2
然后我一直在尝试使用ifelse循环将行追加到需要它的数据帧中,但是我无法使其工作:
test<- lapply(df_list_named,function (x) ifelse(!row.names(df_list_named[[x]]) %in% "mis",rbind(df_list_named[[x]],c(cat = "mis",freq= 0)),ifelse(!row.names(df_list_named[[x]]) %in% "syn",c(cat = "syn",freq= 1))))