簡體   English   中英

R的行百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM