在没有聚合的情况下在R中重塑(例如,MTurk响应字符串) [英] Reshape in R without aggregation (for example MTurk response strings)
本文介绍了在没有聚合的情况下在R中重塑(例如,MTurk响应字符串)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当前格式:
> head(mturk)
AssignmentStatus Input.id Input.State Answer.Q1thing
1 Approved 134231 NY Myguess
2 Approved 134231 NY Myguess
3 Approved 134231 NY BadGuess
4 Submitted 134812 CA Another
5 Approved 134812 CA Another
6 Approved 134812 CA Another
我希望这件事成为
Input.id Input.State Answer.Q1thing.1 Answer.Q1thing.2 Answer.Q1thing.3 AssignmentStatus.1 AssignmentStatus.2 AssignmentStatus.3
134231 NY Myguess Myguess BadGuess Approved Approved Approved
134812 CA Another Another Another Submitted Approved Approved
或者理想情况下,如果有一个变量可以在操作中重做列名...
Id State Answer1 Answer2 Answer3 Status1 Status2 Status3
134231 NY Myguess Myguess BadGuess Approved Approved Approved
134812 CA Another Another Another Submitted Approved Approved
dat <- reshape(mturk, timevar="Answer.Q1thing", idvar=c("Input.id", "Input.state"), direction="wide")
这似乎失败了,因为大多数重塑长到宽的函数都希望变宽的变量本身是一个明确的文本字段-也就是说,这不是一个从长到宽的重塑操作,因为我不想要一个名为"MyGuess""BadGuess"和"Another"的变量,但我想要一个包含这些值的泛型"Answer.X"变量。我不会尝试以任何方式进行汇总,例如Mean或Sum,只是将值列在新位置。
所以,这个问题有两个方向:
- 这种操作有没有别的名字?这是展开、展开、取消连接还是什么?
- 如何在R中执行此操作?
推荐答案
如果您的数据位于data.table
中,则它是一行可以执行以下操作:
library(data.table)
mturk.dt <- as.data.table(mturk)
mturk.dt[, as.list(
rbind(c(Answer.Q1thing, AssignmentStatus))
)
, by=list(Id=Input.id, State=Input.State)]
请注意,by
参数也处理名称更改!
如果要正确命名其他列,请在后面使用setnames
,或者更动态地在j=..
参数中使用setattr
,如下所示:
事后:
## Assuming 'res' is the reshaped data.table form above:
## Change the names of the six V1, V2.. columns
setnames(res, paste0("V", 1:6), c(paste0("Answer", 1:3), paste0("Status", 1:3)))
动态,j=..
## Use `as.data.table` instead of `as.list`, to preserve new names
mturk.dt[, as.data.table(
rbind(c(
setattr(Answer.Q1thing, "names", paste0("Answer", seq(Answer.Q1thing )))
, setattr(AssignmentStatus, "names", paste0("Status", seq(AssignmentStatus)))
))
)
, by=list(Id=Input.id, State=Input.State)]
Id State Answer1 Answer2 Answer3 Status1 Status2 Status3
1: 134231 NY Myguess Myguess BadGuess Approved Approved Approved
2: 134812 CA Myguess Myguess BadGuess Approved Approved Approved
这篇关于在没有聚合的情况下在R中重塑(例如,MTurk响应字符串)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文