r - 如何使用存储在 R 中另一个数据框中的列顺序从数据框中进行选择?
问题描述
我有两个行数相等的数据框。片段是
df1 <- data.frame(X1 = c('3', '2', '1'), X2 = c('1,2', '1,3', '1'))
df1
X1 X2
1 3 1,2
2 2 1,3
3 1 1
df2 <- data.frame(X1_1 = c(3, 2, 1), X1_2 = c(1, 1, 2), X1_3 = c(2, 3, 3), X2_1 = c(1, 1, 1), X2_2 = c(2, 3, 3), X2_3 = c(3, 2, 2))
df2
X1_1 X1_2 X1_3 X2_1 X2_2 X2_3
1 3 1 2 1 2 3
2 2 1 3 1 3 2
3 1 2 3 1 3 2
df1
存储df2
我需要从中获取元素的列号。df1$X1
是的子集中的df2$X1_
第 - 列。是子集中的第 -th 列,依此类推。以我的示例中的第一行为例:所以我需要从(3d 列)中获取元素。这个元素是 2。然后我需要取两个元素,第一个 from和第二个 from 。它们是 1 和 2。我需要将第一行的所有获得的元素作为单个向量存储在所需列表的第一个元素中,依此类推。X1_...
df2
df1$X2
df2$X2_
X2_...
df2
df$X1 = 3
df2$X1_3
df1$X2 = 1,2
df2$X2_1
df2$X2_2
换句话说,对于上面的片段,我需要一个列表
[[1]]
[1] 2 1 2
[[2]]
[1] 1 1 2
[[3]]
[1] 1 1
df1
由字符变量组成。
如何在 R 中创建这个元素列表?
解决方案
这是一种选择。 gather
(在tidyr 1.0.0
-pivot_longer
将是一个替换)'df1' 到 'long' 格式,然后将 'val' 列拆分为,
,并创建一个行/列索引以从 'df2' 和行separate_rows
中提取元素split
数字('rn')
library(dplyr)
library(tidyr)
library(tibble)
d1 <- df1 %>%
rownames_to_column('rn') %>%
gather(key, val, -rn) %>%
#pivot_longer(-rn, names_to= "key", values_to = "val") %>%
separate_rows(val) %>%
unite(key, key, val)
split(df2[cbind(as.numeric(d1$rn), match(d1$key, names(df2)))], d1$rn)
#$`1`
#[1] 2 1 2
#$`2`
#[1] 1 1 2
#$`3`
#[1] 1 1
推荐阅读
- sql-server - 使用服务器名和数据库名修改存储过程
- javascript - 根据时间放置ul li物品
- excel - Spring MVC @GetMapping 生成 json 和 excel
- excel - 合并地址详细信息
- javascript - 检查javascript对象深处的关键多层
- git - 如何避免仅在 Docker 内部发生的“go get”“未知修订”问题?
- pandas - Sort_values Pandas 按索引排序?
- reactjs - 在 ReactJS 中以不同的函数获取返回的 API 结果
- python - 将比较运算符与它在代数上的工作方式联系起来
- r - 使用 long data.frame 或 ggplotly 的 R 交互式堆积面积图