首页 > 解决方案 > 使用条件增加数据框的行数

问题描述

这是数据的一小部分:

我有 :

DPT CITY   ID1  ID2                 Ct_value1           Ct_value_2           suspicion
02   Mpl  EDE1  A2074 A2093 B3045   28.24 24.21 28.35   24.21 23.24 24.45     analytic`
04   Txl  EDE2  A234 A345 A356      23.45 23.42 25.44   21.98 23.43 24.34     clinic
05   Erl  EDE3  A347                23.67               25.56                 clinic
03   Mpl  EDE4  A234 B456           22.34 34.24         45.35 42.34           analytic

我的愿望是根据 ID2 变量中包含的单元格中的信息数增加行数。例如,如果我在 ID2 中有 3 个值用空格分隔,这将导致新数据集中每个不同的 ID2 有 3 行或 1 行,如下所示:

DPT CITY   ID1  ID2     Ct_value1   Ct_value_2 suspicion
02   Mpl  EDE1  A2074   28.24       24.21      analytic`
02   Mpl  EDE1  A2093   24.21       23.24      analytic              
02   Mpl  EDE1  B3045   28.35       24.45      analytic
04   Txl  EDE2  A234    23.45       21.98      clinic
04   Txl  EDE2  A345    23.42       23.43      clinic
04   Txl  EDE2  A356    25.44       24.34      clinic
05   Erl  EDE3  A347    23.67       25.56      clinic
03   Mpl  EDE4  A234    22.34       45.35      analytic
03   Mpl  EDE4  B456    34.24       42.34      analytic

我现在在新数据框中有 9 行,而不是之前的 4 行,我希望其他变量(例如怀疑或城市)的信息相同。有人看到这个问题吗?帮助将不胜感激。十分感谢 !!

标签: rdataframerows

解决方案


使用tidyverse

试试这样

library(tidyverse)

separate_rows(data = df, ID2, Ct_value1, Ct_value_2, convert = TRUE)

使用数据表

library(data.table)
setDT(df)
df[, list(ID2 = tstrsplit(ID2, " "),
          Ct_value1 = tstrsplit(Ct_value1, " "),
          Ct_value_2 = tstrsplit(Ct_value_2, " ")),
   by = list(DPT, CITY, ID1, suspicion)]

推荐阅读