在 R 中有效地拆分数据框中的多个字符向量

Splitting multiple character vectors in a data frame efficiently in R

也许这有点挑剔,但我想想出一种优雅的方式来拆分数据框中的多列字符串。例如,我经常从 Excel 接收数据,其中单位与值位于相同的单元格中,如下所示:

df <- data.frame(A = paste(round(runif(5) * 10), "KG", sep = " "), 
             B = paste(round(runif(5) * 10), "KG", sep = " "), 
             C = paste(round(runif(5) * 10), "KG", sep = " "))
df
     A    B     C
1 1 KG 9 KG  7 KG
2 8 KG 1 KG 10 KG
3 7 KG 8 KG  6 KG
4 5 KG 6 KG  9 KG
5 3 KG 2 KG  9 KG

从这里开始,单元需要分开存储。通常,我会这样做:

df2 <- as.data.frame(apply(df, 2, 
    function(x) as.numeric(lapply(strsplit(as.character(x), 
    split = " ", fixed = TRUE), "[", 1))))

df3 <- as.data.frame(apply(df, 2, 
    function(x) as.character( lapply(strsplit(as.character(x),
    split = " ", fixed = TRUE), "[", 2))))

df4 <- cbind(df2, df3)
df4
  A B  C  A  B  C
1 1 9  7 KG KG KG
2 8 1 10 KG KG KG
3 7 8  6 KG KG KG
4 5 6  9 KG KG KG
5 3 2  9 KG KG KG

它有效,但实施起来很麻烦。这类问题有更好的解决方案吗?

我们可以paste一起阅读read.table

read.table(text=do.call(paste, df), sep="", header=FALSE, stringsAsFactors=FALSE)
#   V1 V2 V3 V4 V5 V6
#1  4 KG  0 KG  6 KG
#2  2 KG  5 KG  4 KG
#3  4 KG 10 KG  1 KG
#4  9 KG  4 KG  7 KG
#5  1 KG  9 KG  5 KG

另一种选择是cSplit

library(splitstackshape)
cSplit(df, names(df), " ")

注意:值不同,因为 set.seed 未被 OP 调用。