[英]Row-wise percentage with R
我有一個看起來像這樣的數據框,但整年都是這樣
date v1 v2 v3 v4 v5 v6 v7 v8 Fraction Percent
01-02-2013 0 0 1 1 1 1 1 0 0.625
01-03-2013 0 0 1 1 0 0 0 0 0.25
01-04-2013 0 0 0 0 0 1 0 0 0.125
01-05-2013 0 0 0 0 0 0 1 0 0.125
01-06-2013 0 0 0 0 0 0 0 0 0
....................................................
....................................................
我的興趣是計算分數列的百分比。 我嘗試使用prop.table
但它沒有用。 我也試過了
df$Percent <- df$Fraction * 100
它給了我以下錯誤
Error in df$Fraction[i] * 100 : non-numeric argument to binary operator
我已經嘗試在循環中執行此操作,這是我使用的代碼
df$Fraction <- 'NA'
df$Percent <- 'NA'
for (i in 1:nrow(df)) {
df$Fraction[i] <- round(sum(df[i, 2:9], na.rm=F)/8, 2)
# I have used only one of the following at one time
df$Percent[i] <- prop.table(as.array(df$Fraction[i]), margin= 2) *100
df$Percent[i] <- df$Fraction[i] * 100
}
我們可以使用rowSums
來代替使用for
循環
df$Fraction <- rowSums(df[2:9], na.rm=TRUE)/8
df$Percent <- 100*df$Fraction
或者正如@ColonelBeauvel所提到的, rowMeans
將更加緊湊和恰當。
df$Fraction <- rowMeans(df[2:9], na.rm=TRUE)
以下代碼適合我
df$Fraction <- NA
df$Percent <- NA
for (i in 1:nrow(df)) {
df$Fraction[i] <- round(sum(df[i, 2:9], na.rm=F)/8, 2)
}
df$Percent <- df$Fraction * 100
# Alternative
df$Frac <- round(rowSums(df[2:9], na.rm=T)/8, 2)
df$Percent <- 100*df$Frac
我找到了兩個我發布的問題的解決方案。
1.我可以取消引用我指定的NA
,因此整列變得logical
,因此我可以計算百分比(或者將列乘以100)。
2.如果我引用'NA'
我可以使用as.numeric
。
謝謝。
Fraction
變量不是數字。 試試這個
df$Fraction <- as.numeric(df$Fraction) * 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.