r - R:在数据框列表中查找特定元素并将其分配给 colname 并将元素切换到右侧
问题描述
让我们有一个数据框列表。
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
...
解决方案
你在寻找这样的东西吗?
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
asfactors
在数据操作中表现不佳。然后我们使用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]
推荐阅读
- unity3d - 当我的玩家在特定时间内达到特定分数时,如何防止特定代码运行?
- c# - 仅当满足某些条件时,如何从按钮单击返回对话框结果 ok
- java - 用于获取最新 Java 版本中已弃用 api 列表的脚本
- c - 适用于 MacOS 但不适用于 Ubuntu 的条件变量
- google-cloud-platform - 云壳和SSH有什么区别?
- javascript - 通过 WebSocket 发送音频
- python - 需要帮忙。无法解决获取错误的网址
- java - 文件存在于目录中,但在 linux 中执行 junit 测试用例时仍然在 linux 中获取 .FileNotFoundException,但在 Windows 中它是有限的
- python - 使用 Pandas 从 Excel 读取日期时间到 Python
- python - Matplotlibs 的仿射变换旋转在网格图中返回一个空白单元格,除非它是最后一个单元格