R有条件地合并行

艾伦

我有一个来自论坛的庞大数据库(包含数千个问题),人们在这里回答问题,而他们的回答是否被接受。如果某人回答不止一次,我需要将他们的答案合并在一起,并在他们第一次回答时将它们放在第一位。这是我正在处理的虚构示例

在此处输入图片说明

这是数据框

        df1 <- data.frame(
          questionID = c(1,1,1,1,2,2,2),
          userID = c(101, 101, 101, 102, 102,103,102),
          accepted=c(0,0,1,0,0,1,0),
          answer=c('text1','text2','text3','text4','text5','text6','text7'),
          time=c('12:00','12:30',"1:00","1:30","2:00","2:30","3:00"))

由于userID(101)回答了问题ID(1)3次,并且第三个答案被接受,因此我需要将答案串联起来,并将其放在最早的时间(即12:00)。对于userID(102),谁回答了两次却都没有被接受,同样的事情。结果将如下所示(带有输出数据框):

在此处输入图片说明

     out <- data.frame(
        questionID = c(1,1,2,2),
        userID = c(101, 102, 102,103),
        accepted=c(1,0,0,1),
        answer=c('text1+text2+text3','text4','text5+text7','text6'),
        time=c('12:00',"1:30","2:00","2:30"))

我已经看到了针对此类问题的一些解决方案,但似乎都无法解决这种精确的情况。在R中有某种方法可以做到这一点吗?

阿克伦

我们可以summarise通过paste将“答案”放入单个字符串中,同时在进行分组之后获得last“接受”和first“时间”值

library(dplyr)
library(stringr)
df1 %>% 
    group_by(questionID, userID) %>%
    summarise(accepted = last(accepted), 
              answer = str_c(answer, collapse="+"), 
              time = first(time))
# A tibble: 4 x 5
# Groups:   questionID [2]
#  questionID userID accepted answer            time 
#       <dbl>  <dbl>    <dbl> <chr>             <fct>
#1          1    101        1 text1+text2+text3 12:00
#2          1    102        0 text4             1:30 
#3          2    102        0 text5+text7       2:00 
#4          2    103        1 text6             2:30 

或使用 data.table

library(data.table)
setDT(df1)[, .(accepted = last(accepted), 
   answer = paste(answer, collapse= "+"), time = first(time), .(questionID, userID)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在r中有条件地合并行

来自分类Dev

SQL-根据前一行的值有条件地合并行

来自分类Dev

如何根据 PostgreSQL 中的行差异有条件地合并行?

来自分类Dev

熊猫有条件地合并(和求和)行

来自分类Dev

有条件地合并多个词典

来自分类Dev

有条件地合并PHP数组

来自分类Dev

有条件地合并多列

来自分类Dev

DataFrame有条件地合并列

来自分类Dev

有条件地拆分和合并文本

来自分类Dev

PHP有条件地合并数组

来自分类Dev

有条件地合并多个词典

来自分类Dev

如何有条件地合并多维数组

来自分类Dev

熊猫有条件地合并(和求和)行

来自分类Dev

有条件地合并两行

来自分类Dev

在R中使用data.table有条件地合并列

来自分类Dev

R:有条件地合并相邻行中的文本,同时保留相关信息

来自分类Dev

有条件地调用R中的特定列

来自分类Dev

有条件地删除R中的行

来自分类Dev

R有条件地更改字符串

来自分类Dev

有条件地在R中创建列

来自分类Dev

在R中有条件地填充ggplot的背景

来自分类Dev

有条件地在R中选择多个列

来自分类Dev

R有条件地更改字符串

来自分类Dev

有条件地在R中命名值

来自分类Dev

有条件地填充 R 中的缺失数据

来自分类Dev

R 有条件地向前和向后结转

来自分类Dev

R 有条件地删除数据框

来自分类Dev

如何有条件地合并R数据帧中的某些行(而不是其他行)?

来自分类Dev

如何有条件地合并R数据帧中的某些行(而不是其他行)?