我正在尝试根据列的值计算中位数或均值。
想象以下DF
DF <- data.frame("name", 1:20, 3, 2:5, 0, 8:12)
colnames(DF)<- c("name","sample_1","sample_2", "sample_3", "median_mean", "Frequence")
我想用中位数或每行3个样本的平均值填充“ median_mean”列,具体取决于频率列。如果Freq大于或等于10,则使用中位数,否则,使用均值。
请记住,样本不一定总是3,所以我不能使用列(2:4)。但是它们的名称将始终为sample_X。
有人可以帮我吗?
DF <- data.frame("name", 1:20, 3, 2:5, 0, 8:12)
colnames(DF)<- c("name","sample_1","sample_2", "sample_3", "median_mean", "Frequence")
DF$median_mean = ifelse(DF$Frequence>=10, apply(DF[grep("sample_", names(DF))], 1L, median), apply(DF[grep("sample_", names(DF))], 1L, mean))
我们使用median
和mean
将相关列应用到:
apply(DF[grep("sample_", names(DF))], 1L, median)
和
apply(DF[grep("sample_", names(DF))], 1L, mean)
但是我们使用三元运算符的矢量化形式仅返回所需的值ifelse
。
该代码还适用于任意数量的命名列,sample_X
因为我们只用来搜索列的名称就可以概括化列的选择grep("sample_", names(DF))
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句