我有两个单独的数据帧,每个数据帧分别用于一个互动双子的说话者。它们具有不同数量的交谈(行),这就是为什么我现在将它们保存在单独的文件中。
为了进行最终分析,我需要为每个发言者提供相同数量的行。
所以我想做的是在两个数据帧中比较dyad_id 1,然后通过删除所有列的最后一行来缩短更长的列表。
我准备了一个数据框来说明我已经拥有的东西。
到目前为止,我试图用dyad_id在两个数据集中拆分数据帧,以现在一个又一个地比较拆分并删除不必要的行。当我进行各种对话时,我需要使它自动化以逐一遍历所有dyad_id。
我希望有人能帮助我,我完全迷失了。
dyad_id_A <- c(1,1,1,2,2,2,2,3,3,3,3,3)
fw_quantiles_a <- c(4,3,1,2,3,2,4,1,4,5,6,7)
df_A<- data.frame(dyad_id_A,fw_quantiles_a)
dyad_id_B <- c(1,1,1,1,2,2,2,3,3,3,3)
fw_quantiles_b <- c(3,1,2,1,2,4,1,3,3,4,5)
df_B <- data.frame(dyad_id_B,fw_quantiles_b)
dyad_id_AB <- c(1,1,1,2,2,2,3,3,3,3)
split_conv_A = split(df_A, list(df_A$dyad_id_A))
split_conv_B = split(df_B, list(df_B$dyad_id_B))
答案 0 :(得分:3)
在每个time
组中添加一个dyad_id_x
计数器,然后merge
一起:
df_A$time <- ave(df_A$dyad_id_A, df_A$dyad_id_A, FUN=seq_along)
df_B$time <- ave(df_B$dyad_id_B, df_B$dyad_id_B, FUN=seq_along)
merge(
df_A, df_B,
by.x=c("dyad_id_A","time"), by.y=c("dyad_id_B","time")
)
# dyad_id_A time fw_quantiles_a fw_quantiles_b
#1 1 1 4 3
#2 1 2 3 1
#3 1 3 1 2
#4 2 1 2 2
#5 2 2 3 4
#6 2 3 2 1
#7 3 1 1 3
#8 3 2 4 3
#9 3 3 5 4
#10 3 4 6 5
答案 1 :(得分:0)
也许我们可以尝试使用table
来计算两个数据帧中ID的频率,前提是您在两个数据帧中具有相同的ID。使用pmin
计算它们之间的最小值,并根据频率重复names
。
tab <- pmin(table(df_A$dyad_id_A), table(df_B$dyad_id_B))
as.integer(rep(names(tab), tab))
# [1] 1 1 1 2 2 2 3 3 3 3