[英]Separating string from multiple columns in R
我有一个看起来有点像这样的数据集
Species Trend2001 TrendLimits2001 Trend 2002 TrendLimits2002
Dog -1.5 -1,-1.64 -1.0 -0.56,-2.0
Cat 2.3 2.0,3.1 1.75 1,2.2
Mouse 0.65 -0.3,1.0 1.02 -0.1,1.5
我想将“TrendLimits”列拆分为两列,分别称为“LowerLimits”和“UpperLimits”。 我知道如何分别为每一列执行此操作,但是有没有办法让 R 根据它们具有“,”的事实拆分所有列? 在我的实际数据集中,我有 100 多列需要拆分,我不想为每一列写出代码。
我希望我的数据最后看起来像
Species Trend2001 LowerLimits2001 UpperLimits2001 Trend 2002 LowerLimits2002 UpperLimits2002
Dog -1.5 -1 -1.64 -1.0 -0.56 -2.0
Cat 2.3 2.0 3.1 1.75 1 2.2
Mouse 0.65 -0.3 1.0 1.02 -0.1 1.5
我对 R 很陌生,所以请给出详细的答案:) 提前致谢!
我们可以使用cSplit
的splitstackshape
library(splitstackshape)
cSplit(df1, c("TrendLimits2001", "TrendLimits2002"), sep=",")
或者使用base R
和read.csv
,创建列的基名 ('v1') paste
年份值paste
为后缀为paste0
和rep
,然后循环遍历具有 'TrendLimits' 作为列名称子字符串的列,读取read.csv
绑定list
与data.frames的cbind
和更新通过转让原始数据集
v1 <- c("LowerLimits", "UpperLimits")
nm1 <- paste0(v1, rep(2001:2002, each = length(v1)))
nm2 <- grep("TrendLimits", names(df1), value = TRUE)
df1[nm1] <- do.call(cbind, lapply(df1[nm2], function(x)
read.csv(text = as.character(x), header = FALSE)))
df1[nm2] <- NULL
df1
# Species Trend2001 Trend2002 LowerLimits2001 UpperLimits2001 LowerLimits2002 UpperLimits2002
#1 Dog -1.50 -1.00 -1.0 -1.64 -0.56 -2.0
#2 Cat 2.30 1.75 2.0 3.10 1.00 2.2
#3 Mouse 0.65 1.02 -0.3 1.00 -0.10 1.5
df1 <- structure(list(Species = c("Dog", "Cat", "Mouse"), Trend2001 = c(-1.5,
2.3, 0.65), TrendLimits2001 = c("-1,-1.64", "2.0,3.1", "-0.3,1.0"
), Trend2002 = c(-1, 1.75, 1.02), TrendLimits2002 = c("-0.56,-2.0",
"1,2.2", "-0.1,1.5")), class = "data.frame", row.names = c(NA,
-3L))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.