我有以下 for 循环脚本:
# Create example data
dataKM <- data.frame(x1 = 1:5,
x2 = 6:10,
x3 = 11:15)
# Duplicate dataframe
datatest <- dataKM[c(1:3)]
# for loop
for(i in colnames(dataKM[,2:ncol(dataKM)])) {
# median of each single column of dataframe
median <- median(dataKM[,i])
# add column in duplicated dataframe with 'High' or 'low' based on median for each column
datatest$median[dataKM[,i] <= median ] <- "Low"
datatest$median[dataKM[,i] > median ] <- "High"
}
我尝试对 dataKM 数据帧的每一列重复 for 循环,并将结果保存为数据集数据帧中的列。我的脚本仅保存最后一次迭代。我可能会得到一个输出,因为我在循环中的每次传递中都覆盖了先前的值。 我想知道如何将所有 for 循环输出保存在各自的列中。 谁能帮我?非常感谢,我希望这对于其他尝试做类似事情的人来说也是有用的。
最佳答案
我们可以只使用lapply
函数
datatest <- dataKM[c(2:3)]
datatest[] <- lapply(dataKM[-1] , function(x) ifelse(x <= median(x) , "Low" , "High"))
colnames(datatest) <- c("x2Median" , "x3Median")
cbind(dataKM , datatest)
- 输出
x1 x2 x3 x2Median x3Median
1 1 6 11 Low Low
2 2 7 12 Low Low
3 3 8 13 Low Low
4 4 9 14 High High
5 5 10 15 High High
如果你坚持使用for循环
试试这个
datatest <- dataKM[c(1:3)]
for(i in colnames(dataKM[-1])) {
median <- median(dataKM[,i])
datatest[[paste0(i,"median")]][dataKM[,i] <= median ] <- "Low"
datatest[[paste0(i,"median")]][dataKM[,i] > median ] <- "High"
}
关于R:for循环输出仅保存输出数据帧中的最后结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73177008/