我在R中有一个大数据框。 我想基于其他列的值从一组列中合并/选择值。 我有这样的结构:
set.seed(45)
df <- data.frame(Other.Variables = sample(5),
A.1 = sample(5),
A.2 = sample(5),
B.1 = sample(5),
B.2 = sample(5),
C.1 = sample(5),
C.2 = sample(5),
Category = as.factor(c("A","B","A","C","B")))
df
Other.Variables A.1 A.2 B.1 B.2 C.1 C.2 Category
1 4 2 2 3 1 1 2 A
2 2 1 4 4 2 4 5 B
3 1 5 1 1 4 3 4 A
4 3 4 3 5 3 2 3 C
5 5 3 5 2 5 5 1 B
类别是一个具有值(A,B,C等)的因素。
我的输出应该是
Other.Variables 1 2 Category
1 4 2 2 A
2 2 4 2 B
3 1 5 1 A
4 3 2 3 C
5 5 2 5 B
具有A.1,B.1或C.1等值,具体取决于Category的值。 列名称实际上包含点之前“类别”中的名称。
我一直在尝试使用dplyr进行此操作,因为我的大部分代码都使用dplyr和管道运算符,但是我也愿意接受其他选择。
[编辑]我试图给出一个关于我拥有哪种数据的更说明性的例子。 问题是类别有20个不同的值,每个类别有15列。
答案 0 :(得分:0)
我实际上已经为自己的问题找到了dplyr解决方案。诀窍是使用一些收集和扩展,最后使用过滤器,从宽到长然后再回到宽格式。当然,也可以使用tydiverse之外的其他重塑功能来完成此操作。
这是我的解决方法:
df %>%
+ gather(v, value, A.1:C.2) %>%
+ separate(v, c("var", "col")) %>%
+ spread(col, value) %>%
+ filter(Category == var) %>%
+ select(-var)
Other.Variables Category 1 2
1 1 A 5 1
2 2 B 4 2
3 3 C 2 3
4 4 A 2 2
5 5 B 2 5
也许可以帮助遇到类似问题的人。