我有一个数据框列表。
> pairs
$`1`
Var1 Var2
1 up1 down1
4 up2 down2
$`2`
Var1 Var2
3 up1 down2
2 up2 down1
我想将这些字符串折叠为两个字符串并将它们附加到矢量(或数据帧的列)
我已经声明了一个数据框(我想稍后再添加一个列),特别是使用stringsAsFactors = F
ratioGroups<-data.frame(ratioGroupName = character(), stringsAsFactors = F)
colnames(ratioGroups)<-c("groupName")
首先,我已经隔离了每个数据帧
group1<-as.data.frame(pairs$`1`)
group2<-as.data.frame(pairs$`2`)
然后我强迫其中的所有内容都是字符而不是因素,并将所有内容放回到数据框中。
group1<-as.data.frame(do.call(rbind,lapply(group1, as.character)))
group2<-as.data.frame(do.call(rbind,lapply(group2, as.character)))
然后我使用折叠将每一行折叠为一个单词
ratioNames1<-apply(group1,1,paste,collapse="_")
ratioNames2<-apply(group2,1,paste,collapse="_")
哪个工作正常。
> class(ratioNames1)
[1] "character"
> ratioNames1
V1 V2
"up1_down1" "up2_down2"
>
然后我将每个转换为单行
ratioGroup1<-paste(ratioNames1[1],ratioNames1[2],sep="-")
ratioGroup2<-paste(ratioNames2[1],ratioNames2[2],sep="-")
再次,工作正常。然后我尝试将这些添加到初始数据帧。第一个工作正常但由于某种原因它会覆盖列名(??)
> ratioGroups
[1] groupName
<0 rows> (or 0-length row.names)
> ratioGroups<-rbind(ratioGroups,ratioGroup1)
> ratioGroups
X.up1_down1.up2_down2.
1 up1_down1-up2_down2
>
尝试添加另一行
> ratioGroups<-rbind(ratioGroups,ratioGroup2)
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = "up1_up2-down2_down1") :
invalid factor level, NA generated
>
我有一个下午,我只能认为R特别是asinine。我强迫一切都是角色而不是水平,无处不在,它仍然会尝试将某些东西转化为某个因素。我猜测那里有一个我用它的命令的默认行为,因为原因将所有内容转换成一个因子。我知道哪里出错了?我之后看起来像是:
> ratioGroups
groupName
up1_down1-up2_down2
up1_down2-up2_down1
我可以继续使用rbind附加名称。