R 对数据帧中的数字字符串执行函数
如果我有一个简单的数据框,其样本和数字表示为如下字符:R 对数据帧中的数字字符串执行函数,r,R,如果我有一个简单的数据框,其样本和数字表示为如下字符: Sample Vals A 1,2,3,4,5 B 3,4,5,6,7 C 6,7,8 这样我们就可以将字符串转换为数字(或传递给函数)并对其进行操作,从而得到类似于平均值的值(或其他值) 我面临的挑战是类型转换。例如,我可以通过 df$Vals<-strsplit(df$Vals, ",") df$Vals我们可以使用data.table。按“样本”分组,我们将“VA
Sample Vals
A 1,2,3,4,5
B 3,4,5,6,7
C 6,7,8
这样我们就可以将字符串转换为数字(或传递给函数)并对其进行操作,从而得到类似于平均值的值(或其他值)
我面临的挑战是类型转换。例如,我可以通过
df$Vals<-strsplit(df$Vals, ",")
df$Vals我们可以使用data.table
。按“样本”分组,我们将“VAL”按,
进行拆分,转换为“数值”,获得平均值
,并将其分配(:=
)为“平均值”列
library(data.table)
setDT(df1)[,Mean := mean(as.numeric(strsplit(Vals, ',')[[1]])) , by = Sample]
df1
# Sample Vals Mean
#1: A 1,2,3,4,5 3
#2: B 3,4,5,6,7 5
#3: C 6,7,8 7
或者使用cSplit
,我们将“VAL”除以,
,得到“VAL”的平均值,按“样本”分组
library(splitstackshape)
cSplit(df1, 'Vals', ',', 'long')[, list(Vals=toString(Vals),
Mean=mean(Vals)) , by = Sample]
使用base R
我们可以使用strsplit
用逗号分割列,然后找到平均值。读取数据时,确保将stringsAsFactors=FALSE
:
df$Mean <- sapply(strsplit(df$Vals, ","), function(x) mean(as.numeric(x)))
df
# Sample Vals Mean
#1 A 1,2,3,4,5 3
#2 B 3,4,5,6,7 5
#3 C 6,7,8 7
df$Mean使用数据的另一个选项。表
是将tstrsplit
和rowMeans
组合起来,从而避免按行操作
library(data.table) #V1.9.6+
setDT(df)[, Mean := rowMeans(setDT(tstrsplit(Vals, ",", type.convert = TRUE)), na.rm = TRUE)]
# Sample Vals Mean
# 1: A 1,2,3,4,5 3
# 2: B 3,4,5,6,7 5
# 3: C 6,7,8 7
好的,是的,这很有帮助。我没有将StringsFactors设置为FALSE
library(data.table) #V1.9.6+
setDT(df)[, Mean := rowMeans(setDT(tstrsplit(Vals, ",", type.convert = TRUE)), na.rm = TRUE)]
# Sample Vals Mean
# 1: A 1,2,3,4,5 3
# 2: B 3,4,5,6,7 5
# 3: C 6,7,8 7