繁体   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