r从数据帧中提取列表元素

时间:2015-08-25 13:17:56

标签: r list dataframe

我正在使用数据,其中文本注释用于记录字段内容的更改,而不是具有额外的记录和开始/结束日期。所以数据看起来像这样:

Study  Fob
1      100
2      101 now 102
3      103

注意:测试数据可以用:

构建
df <- data.frame(Study = 1:3,
                 Fob = c("100", "101 now 102", "103"),
                 stringsAsFactors = FALSE)

我想最终得到以下表格,以便我可以将其处理为从Fob信号数据到研究ID的多对一转换:

Study  Fob
1      100
2      101
2      102
3      103

我可以用以下方法摆脱多余的文字:

df$IDs <- strsplit(df$Fob, "[^0-9]+")

让我:

    Study  Fob          IDs
    1      100          100
    2      101 now 102  c("101", "102")
    3      103          103

但无法继续下去。我的第一个想法是使用基于ID长度的计数器尝试replicate具有多个ID(如2)的行,但添加df$counter <- length(df$IDs)只会得到一个值为3的列,因为它取ID列的长度,而不是其中的元素。

1 个答案:

答案 0 :(得分:3)

一个选项是来自cSplit的{​​{1}}。我们将模式指定为library(splitstackshape),使用split作为默认值fixed=FALSEfixed=TRUE

direction = 'long'

library(splitstackshape) cSplit(df, 'Fob', '[^0-9]+', fixed=FALSE, 'long') # Study Fob #1: 1 100 #2: 2 101 #3: 2 102 #4: 3 103 意味着还有一个不是数字的字符。因此,它将被所有非数字字符拆分,只留下数字部分。默认情况下为[^0-9]+,因此我们将在type.convert=TRUE之后获取数字列class

或者,不是使用split,而是使用[^0-9]+来压缩所有非数字字符(来自@David Arenburg&#39;)

\\D+