我目前在R中有一个数据框,其中包含一个具有唯一标识符的变量,而其中的几个变量仅包含二进制响应(0或1)。总结列并将结果添加到数据框中R
我的数据帧的简化版本有两个例子行:
c.names <- c("ID", "male", "female")
df <- c("ADH0004", 0, 1,
"ADH0005", 1, 0)
df <- matrix(df, nrow = 2, byrow = T)
df <- as.data.frame(df)
names(df) <- c.names
df
在我最后的数据帧我将有可能影响几百个变量,所有二进制。我想找到一种方法:
- 获取每个变量的列总和,
- 指定列总和(1)到一个新的变量(在复制到每行总) 。
- 重复这在每个变量,所以我有n个变量,并在相同数量与合计新变量
回到我的简单的数据帧例如,我的新的数据帧会是什么样子:
c.names <- c("ID", "male", "female", "male_t", "female_t")
df <- c("ADH0004", 0, 1, 1, 1,
"ADH0005", 1, 0, 1, 1)
df <- matrix(df, nrow = 2, byrow = T)
df <- as.data.frame(df)
names(df) <- c.names
df
一次为一个变量做这件事很简单(即使对我来说)。我只想:
df$male_t <- sum(df$male)
我可以为每个变量手动做到这一点,但我希望我能有上百年,所以我想遍历该结束了。如果更容易,我不介意使用for循环(而不是应用),因为我的循环数量相对较少,所以编码的简易性比代码的绝对速度更重要。不过,我已经尝试了这两种方法。
为:
varlist <- c("male", female")
for (i in varlist) {
df$i_t <- df$i
}
(我在这里试图模仿一个for循环我在Stata,其中总变量与`i'_t产生的锯,但这似乎并没有工作在R.
我也试着申请:
apply(df[c("male", "female")], MARGIN = 2, sum)
这让我更接近我想要的结果,但我不知道如何保存列总和的数据帧作为新列,而不是简单地输出到t他像现在一样控制台。
任何建议将不胜感激,自然我已经广泛地看待了stackoverflow和更广泛的互联网。 菲尔
用小编辑,即工作,谢谢!我需要通过仅指定列2和3来排除第一列:for(var in colnames(df [,2:3])){...,否则它尝试并且无法添加ID。 – Phil
啊哈。固定。 :) –
[-1]的作品也一样! – Phil