我想知道如何创建一个函数以从A02,A03列等中减去A01列中的值。
示例数据框:
A01 A02 A03 A04 A05 (...)
1 158 297 326 354 357
2 252 131 341 424 244
3 ...
4 ...
我可以手动减去每一列,例如:
sampledata[1]-sampledata[1]
sampledata[2]-sampledata[1]
sampledata[3]-sampledata[1]
sampledata[4]-sampledata[1] ... etc.
但是如何为每个列做一个不错的函数来进行此计算呢?结果,我想拥有这个:
A01 A02 A03 A04 A05 (...)
1 0 139 168 196 199
2 0 -121 89 171 -8
3 ...
4 ...
减去后,如果某个值是负数,那么我想将其转换为零。
我认为我的问题很容易解决,但是我是R中的新手。
答案 0 :(得分:0)
方法如下:
# Your data
A01 <- c(158, 252)
A02 <- c(297, 131)
A03 <- c(326, 341)
A04 <- c(354, 424)
A05 <- c(357, 244)
df <- data.frame(A01, A02, A03, A04, A05, stringsAsFactors = FALSE)
df
# Define the function
f_minus <- function(first_col, other_col) {
other_col - first_col
}
df_output <- as.data.frame(matrix(ncol=ncol(df), nrow=nrow(df)))
for (i in 1:ncol(df)) {
df_output[,c(i)] <- f_minus(df[,1], df[,i])
}
df_output
# V1 V2 V3 V4 V5
# 1 0 139 168 196 199
# 2 0 -121 89 172 -8
答案 1 :(得分:0)
谢谢大家提供不同的解决方案。 似乎最简单且仍然完美的工作是@DavidArenburg建议的:
new_sample_data = (sampledata - sampledata[,1]) * (sampledata > sampledata[,1])
它在一个公式中进行了两次转换(减去第一列,并将负数转换为零)。
谢谢!