R - 从data.frame列中取消列表列表

时间:2016-04-18 20:24:25

标签: r dataframe multiple-columns nested-lists

我有一个包含两列的data.frame,如下所示:

sid        calibration
sid201     [['left', '37.1', '18.9', '0.0', '0.9\xb0', '0.4\xb0'], ['right', '42.2', '24.0', '0.0', '1.0\xb0', '0.6\xb0']]
sid202     [['left', '7.4', '13.6', '0.0', '0.2\xb0', '0.3\xb0'], ['right', '14.6', '15.1', '0.0', '0.3\xb0', '0.4\xb0']]
每行

等等。

我遇到的问题是弄清楚如何从"校准"中提取我需要的信息。列。

我想解析"校准"使用" left"将因子分成两行和"对"是一个新因素的水平" eye",并且其他5个元素中的每一个都被分配到它自己的列 - 让我们简单地说列a:e。

1 个答案:

答案 0 :(得分:0)

如果按照您的说法存储数据,您可以尝试以下名为df的data.frame:

# stack the data
dfStacked <- data.frame("sid"=c(df$sid, df$sid), 
             "calibration"=c(sapply(df$calibration, function(i) c(i[[1]])),
                             sapply(df$calibration, function(i) c(i[[2]]))))
# split the data vectors
calibList <- strsplit(dfStacked$calibration, split=", ")

# put the results into a data.frame, loops through variables in outer loop
# loops through observations in inner row to get variables
results <- as.data.frame(sapply(1:5, 
          function(element) cbind(sapply(calibList, function(row) c(row[[i]])))))
# add to dataset
dfDone <- cbind(dfStacked$sid, results)