Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R将一个向量的元素分配给另一个向量的元素_R_Vector_Element_Assign - Fatal编程技术网

用R将一个向量的元素分配给另一个向量的元素

用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”、“activities”和“minutes”(见下文)的数据框中,我想将用户1的第一个活动的持续时间(4分钟到活动“READ”)分配给新变量READ_duration。然后将第二个活动(“编辑”)的持续时间(5分钟)转换为新变量EDIT_duration。第三个活动(再次“读取”)的持续时间(2分钟)为新变量READ_duration


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