希望您能解决我的问题。
我的数据集看起来像这样。有1500行。
+-------+---------+---------+--------+
| index | item | taste | price |
+-------+---------+---------+--------+
| 1 | orange | low | 3 |
| 1 | banana | medium | 4 |
| 1 | pier | high | 2 |
| 2 | apple | medium | 4 |
| 2 | orange | medium | 4 |
| 2 | banana | medium | 3 |
| ... | ... | ... | ... |
| 1500 | 1500 | 1500 | 1500 |
+-------+---------+---------+--------+
我使用此代码,但收到错误消息:
library(data.table)
dcast(setDT(df), index ~ item, value.var = c("taste", "price"))
错误提示:
.subset2(x,i,确切=精确)中的错误:下标超出范围 另外:警告消息: 在if(!(value.var%in%names(data))){: 条件的长度> 1,并且只会使用第一个元素
这是我想要得到的预期结果。
index, item, taste_orange,taste.banana, taste.pier, taste.apple, price_orange,price.banana, price.pier, price.apple,
1, low,medium,high,0,3,4,2,0
2, medium,medium,0,medium,4,3,0,4
...,...,...,...,...,...,...,....,...
1500,1500, 1500,1500,1500,1500,1500,1500,1500
谢谢!
答案 0 :(得分:0)
如果您不介意使用tidyverse方法,则可以执行以下操作:
VLOOKUP(SUBSTITUTE(A2;"*";"~*");Users!A:P;4;FALSE)
“收集”命令创建一个“长”数据帧,其中“键”变量包含存储的信息类型(即口味和价格),“值”变量包含实际值;由于值的类型不同,因此将数值强制转换为字符。 “ unite”合并到新列中,“ names”项说明和信息类型。 “ spread”会为“ names”列的每个值创建一个新列,并带有相应的值。最后一位(mutate_at)将价格转换为数字格式。