【发布时间】:2022-09-29 21:54:04
【问题描述】:
我的示例数据集很宽,包含以下值:
olddata_wide <- read.table(header=TRUE, text=\'
subject sex a b c a1 b1 c1 a2 b2 c2
1 M 7.9 12.3 10.7 7.5 12.1 10.3 8.1 12.5 10.9
2 F 6.3 10.6 11.1 6.0 10.4 11.0 6.5 10.9 11.4
3 F 9.5 13.1 13.8 9.3 13.0 13.5 9.8 13.5 13.9
4 M 11.5 13.4 12.9 11.2 13.5 12.7 11.7 13.6 13.9
\')
我想将其转换为长数据集。问题是我想同时使用多个 keycols - 我希望列 a & b & c 成为一个名为 value 的长列,以及列 a1 和 @987654327 @ & c1 到 value1 和 a2 & b2 & c2 到 value3。所以期望的结果是:
subject sex value valueType value1 valueType1 value2 valueType2
1: 1 M 7.9 a 7.5 a1 8.1 a2
2: 2 F 6.3 a 6.0 a1 6.5 a2
3: 3 F 9.5 a 9.3 a1 9.8 a2
4: 4 M 11.5 a 11.2 a1 11.7 a2
5: 1 M 12.3 b 12.1 b1 12.5 b2
6: 2 F 10.6 b 10.4 b1 10.9 b2
7: 3 F 13.1 b 13.0 b1 13.5 b2
8: 4 M 13.4 b 13.5 b1 13.6 b2
9: 1 M 10.7 c 10.3 c1 10.9 c2
10: 2 F 11.1 c 11.0 c1 11.4 c2
11: 3 F 13.8 c 13.5 c1 13.9 c2
12: 4 M 12.9 c 12.7 c1 13.9 c2
我知道如何得到想要的结果以编程方式为了一关键列:
keycol <- \"valueType\"
valuecol <- \"value\"
gathercols <- c(\"a\", \"b\", \"c\")
gather_(olddata_wide, keycol, valuecol, gathercols)
但是如何同时为多个 keycols 执行此操作?
-
我认为这里的问题是列名不一致:第一组列是
c(\"a\", \"b\", \"c\")(没有尾随数字),而其他列有一个尾随数字(例如c(\"a1\", \"b1\", \"c1\"))。将三个pivot_longer调用汇总到一个函数中是否适合您的需要?您是否总是有三组 \"a\"、\"b\"、\"c\" 列,其名称与示例数据中给出的名称相同?
标签: r data.table tidyr gather mutate