我目前在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