我们有一个数据帧列表。
df1 <- data.frame(V1=c("a", "b", "c"),V2=c("d", "e","f"), V3=c("g","h","i"),V4=c("j","k","l"))
df2 <- data.frame(V1=c("m","n"), V2=c("o","p"), V3=c("q","r"))
l <-list(df1, df2)
> l
[[1]]
V1 V2 V3 V4
1 a d g j
2 b e h k
3 c f i l
[[2]]
V1 V2 V3
1 m o q
2 n p r
在此列表中,有一个数据框,该数据框已翻转,并且colnames作为列表的元素。数据框[[1]]
刚刚转动并合并了数据框(参见图片)。
例如,列V1和V3共命名,而列V2和V4是变量。
我想运行一些与数据帧中的元素之一匹配的代码(ele
是包含原始列名称的向量):
ele <- c("a","b","c","g","h","i")
,当它匹配时,将该元素分配为colname,并将右边的元素分配为该列的变量,最后我们可以获得新的数据框,例如:
dfa<-data.frame(a="d")
> dfa
a
1 d
重要提示:请注意,list[[2]]
将不匹配。我宁愿选择循环/ lappy的方法,并获得dfa
,dfb
,dfc
...
答案 0 :(得分:1)
您是否正在寻找类似的东西?
df1[]=apply(df1,2,as.character)
setNames(as.data.frame(t(unlist(df1[,c(FALSE,TRUE)]))),
unlist(df1[,c(TRUE,FALSE)]))
a b c g h i
1 d e f j k l
我们首先将factors
更改为character
,因为factors
在数据操作中表现不佳。然后,我们使用c(FALSE,TRUE)
选择偶数列(即dataframe
的内容)并分配名称(即几率(c(TRUE,FALSE)
)
修改
检查名称引用之间是否匹配以执行该过程。
ele <- c("a","b","c","g","h","i")
l = lapply(l, function(x){
x[]=apply(x,2,as.character)
if (any(unlist(x)%in%ele)){
setNames(as.data.frame(t(unlist(x[,c(FALSE,TRUE)]))),
unlist(x[,c(TRUE,FALSE)]))
} else {NA}
})
l
[[1]]
a b c g h i
1 d e f j k l
[[2]]
NULL
如果您要删除nulls
,请使用l[lengths(l) != 0]