R 基于数学计算创建新列
我有一个数据框,看起来像这样:R 基于数学计算创建新列,r,R,我有一个数据框,看起来像这样: df X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 0.14 0.84 0.92 0.88 0.06 0.08 0.91 0.17 0.85 0.08 0.9 0.11 0.11
df
X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1
0.14 0.84 0.92
0.88 0.06 0.08
0.91 0.17 0.85
0.08 0.9 0.11
0.11 0.16 0.04
0.83 0.1 0.87
X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 X24_TT_1.2_P X135_121.FTT_2.2_P X1055_121.FTT_3.2_P
0.14 0.84 0.92 3.91 708.75 12132.50
0.88 0.06 0.08 176.00 8.62 91.74
0.91 0.17 0.85 242.67 27.65 5978.33
0.08 0.9 0.11 2.09 1215.00 130.39
0.11 0.16 0.04 2.97 25.71 43.96
0.83 0.1 0.87 117.18 15.00 7060.38
我想创建一个新的列,该列的名称与最后添加的“\u p”相同,计算公式为:
对于列X24_TT_1.1=24*(0.14/(1-0.14))
对于列X135_121.FTT_2.1=135*(0.84/(1-0.84))
对于X1055_121列,FTT_3.1=1055*(0.92/(1-0.92))
最后应该是这样的:
df
X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1
0.14 0.84 0.92
0.88 0.06 0.08
0.91 0.17 0.85
0.08 0.9 0.11
0.11 0.16 0.04
0.83 0.1 0.87
X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 X24_TT_1.2_P X135_121.FTT_2.2_P X1055_121.FTT_3.2_P
0.14 0.84 0.92 3.91 708.75 12132.50
0.88 0.06 0.08 176.00 8.62 91.74
0.91 0.17 0.85 242.67 27.65 5978.33
0.08 0.9 0.11 2.09 1215.00 130.39
0.11 0.16 0.04 2.97 25.71 43.96
0.83 0.1 0.87 117.18 15.00 7060.38
我希望动态执行此操作,因为dataset有100多列您可以使用$sign向数据框添加新列,执行以下操作:
df$X24_TT_1.1_P <- 24 * (df$X24_TT_1.1/(1-df$X24_TT_1.1))
df$X24_TT_1.1_P试试这个:
x <- sapply(names(df), function(x) {
s <- strsplit(x, "_")[[1]][1]
s <- substring(s, 2, nchar(s))
as.numeric(s)*(df[,x]/(1 - df[,x]))
})
colnames(x) <- paste0(colnames(df), "_P")
cbind(df, round(x,2))
X24_TT_1.1 X135_121.FTT_2.1 X1055_121.FTT_3.1 X24_TT_1.1_P X135_121.FTT_2.1_P X1055_121.FTT_3.1_P
1 0.14 0.84 0.92 3.91 708.75 12132.50
2 0.88 0.06 0.08 176.00 8.62 91.74
3 0.91 0.17 0.85 242.67 27.65 5978.33
4 0.08 0.90 0.11 2.09 1215.00 130.39
5 0.11 0.16 0.04 2.97 25.71 43.96
6 0.83 0.10 0.87 117.18 15.00 7060.38
x我想动态执行此操作,因为数据集的列数超过100列。我想动态执行此操作,因为数据集的列数超过100列columns@ROY查看我的更新我希望动态执行此操作,因为数据集有100多个columns@Roy我已经更新了