【发布时间】:2015-10-07 05:27:33
【问题描述】:
我有一个看起来像这样的数据框,但是是全年的
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
}
【问题讨论】:
-
检查分数的类别。这将是非数字的。您使用带引号的 NA 将列从数字转换为非数字。只需使用
NA而不是字符 NA。 -
df$Fraction <- as.numeric(df$Fraction) * 100 -
fraction的类是character -
只需将
df$Fraction <- NA作为您的第一行代码。连同df$Percent <- NA。顺便说一句,您在这里不需要任何循环。可能,prop.table(round(rowSums(df[2:9], na.rm=TRUE)/8,2), margin=2)*100 -
感谢@akrun 成功了
标签: r