用R将一个向量的元素分配给另一个向量的元素
我想为每个用户将一个向量的元素分配给另一个向量的元素 例如: 在包含变量“user”、“activities”和“minutes”(见下文)的数据框中,我想将用户1的第一个活动的持续时间(4分钟到活动“READ”)分配给新变量READ_duration。然后将第二个活动(“编辑”)的持续时间(5分钟)转换为新变量EDIT_duration。第三个活动(再次“读取”)的持续时间(2分钟)为新变量READ_duration用R将一个向量的元素分配给另一个向量的元素,r,vector,element,assign,R,Vector,Element,Assign,我想为每个用户将一个向量的元素分配给另一个向量的元素 例如: 在包含变量“user”、“activities”和“minutes”(见下文)的数据框中,我想将用户1的第一个活动的持续时间(4分钟到活动“READ”)分配给新变量READ_duration。然后将第二个活动(“编辑”)的持续时间(5分钟)转换为新变量EDIT_duration。第三个活动(再次“读取”)的持续时间(2分钟)为新变量READ_duration user这需要将sum作为一个聚合函数,对宽格式进行简单的重塑 准备长格式d
user这需要将sum
作为一个聚合函数,对宽格式进行简单的重塑
准备长格式data.frame:
user <- c(1,2,3)
activities <- list(c("READ","EDIT","READ"), c("READ","EDIT", "WRITE"), c("WRITE","EDIT"))
minutes <- list(c(4,5,2), c(3.5, 1, 2), c(4.5,3))
DF <- Map(data.frame, user = user, activities = activities, minutes = minutes)
DF <- do.call(rbind, DF)
# user activities minutes
#1 1 READ 4.0
#2 1 EDIT 5.0
#3 1 READ 2.0
#4 2 READ 3.5
#5 2 EDIT 1.0
#6 2 WRITE 2.0
#7 3 WRITE 4.5
#8 3 EDIT 3.0
在base R中,您可以执行以下操作:
xtabs(min~ind+values, cbind(stack(setNames(activities, user)), min = unlist(minutes)))
values
ind EDIT READ WRITE
1 5.0 6.0 0.0
2 1.0 3.5 2.0
3 3.0 0.0 4.5
顺便说一下,非常感谢您的反馈!它起作用了!!:)现在我只需要找出它是如何与我的数据集一起工作的,这些数据集由列表组成,它们又由列表组成,等等。
library(reshape2)
dcast(DF, user ~ activities, value.var = "minutes", fun.aggregate = sum)
# user EDIT READ WRITE
#1 1 5 6.0 0.0
#2 2 1 3.5 2.0
#3 3 3 0.0 4.5
xtabs(min~ind+values, cbind(stack(setNames(activities, user)), min = unlist(minutes)))
values
ind EDIT READ WRITE
1 5.0 6.0 0.0
2 1.0 3.5 2.0
3 3.0 0.0 4.5