有人能帮我找出将以下数据以长格式(图1)转换为宽格式(图2)的代码吗?我想用宽格式制作一个热图。非常感谢。
我试过了
dat_wide <- dcast(dat1,
id1+id2 ~ grade + year + category,
value.var = c("%level1", "%level2"))
然后出现了一条错误消息:!!无法使用value.var
提取列。value.var
子脚本✖必须大小为1,而不是2。
发布于 2022-11-04 10:05:54
这里的主要问题是调用dcast
函数,即dcast
在data.table
和reshape2
包中可用。如果数据是data.table
,则调用data.table::dcast
而不是reshape2::dcast
,但如果是data.frame,则可以调用reshape2::dcast
(假设两者都加载)。与data.table::dcast
,
value.var -.,通过将多个value.var列的名称作为字符向量同时进行强制转换。
而在?reshape2::dcast
value.var -存储值的列的名称,请参阅guess_value以获得解决此问题的默认策略。也就是说,它只能接受
value.var
中的一个列
-testing
> reshape2::dcast(dat1,
id1+id2 ~ grade + year + category,
value.var = c("%level1", "%level2"))
Error in if (!(value.var %in% names(data))) { :
the condition has length > 1
鉴于
dcast(as.data.table(dat1),
id1+id2 ~ grade + year + category,
value.var = c("%level1", "%level2"))
Key: <id1, id2>
id1 id2 %level1_3_2016_A %level1_3_2016_B %level1_3_2017_A %level1_3_2017_B %level2_3_2016_A %level2_3_2016_B %level2_3_2017_A %level2_3_2017_B
<num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
1: 1 101 58 56 57 53 33 20 34 19
2: 2 102 54 49 58 43 32 19 32 20
数据
dat1 <- structure(list(id1 = c(1, 1, 1, 1, 2, 2, 2, 2), id2 = c(101,
101, 101, 101, 102, 102, 102, 102), grade = c(3, 3, 3, 3, 3,
3, 3, 3), year = c(2016, 2017, 2016, 2017, 2016, 2017, 2016,
2017), category = c("A", "A", "B", "B", "A", "A", "B", "B"),
`%level1` = c(58, 57, 56, 53, 54, 58, 49, 43), `%level2` = c(33,
34, 20, 19, 32, 32, 19, 20)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -8L))
https://stackoverflow.com/questions/74320990
复制相似问题