如何更改变量的级别?

时间:2015-06-19 19:00:21

标签: r

我的数据包含一些数值以及一些字母, 因此我有

brew uninstall openssl

我知道这是保存为级别数的因素。我想将n / a改为零,因为这是它的数值,但我不知道该怎么做。我使用过简单的命令,但它不会让我,数据比我给的大,所以不能手动完成。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

带有因子的问题是将值赋值给向量中的位置要求值在因子属性的级别中。您可以使用levels<- - 函数在“级别”中增加可接受的值。

> j = factor( c( 5 , 6, 7, 6, 7,12 , 'missing' , 6 ,7, 8, 'missing' , 'n/a', 'n/a', 5, 6) 
# Notice that I corrected your code since you didn't enclose the character values in quotes 
# ,,,, and seemed to be missing a comma
> levels(j) <- c(levels(j), 0)  # append to levels; keep initial order.
> j[j=='n/a'] <- 0
> j
 [1] 5       6       7       6       7       12      missing 6      
 [9] 7       8       missing 0       0       5       6      
Levels: 12 5 6 7 8 missing n/a 0

这种确切的语法不适用于你有真正的R NA而不是'n / a'的情况,因为==只有NA。< / p>

再次看到这一点,我意识到我没有看到@ akrun关于简单地使用level<-修改“属性”级别属性的建议的美观和简洁。

 levels(j)[levels(j)=='n/a'] <- 0

他的建议的逻辑具有不增加级别数量的可能期望的特征,即向量中的整数值保持相同,但只需要在属性内修改它们的标签。我承认经常被R中的因素绊倒,个人失败我显然仍然在努力。

答案 1 :(得分:1)

不确定但是怎么样,即使之后你必须转换为数字并尝试对那些"missing"执行其他代码,因为正如你在这里看到的那样,所有都被强制转换为字符串:

j <- as.factor(c( 5, 6, 7, 6, 7, 12, "missing", 6 , 7, 8, "missing" , "n/a", "n/a", 5, 6) )

gsub("n/a", 0, j)
 [1] "5"       "6"       "7"       "6"       "7"       "12"      "missing" "6"      
 [9] "7"       "8"       "missing" "0"       "0"       "5"       "6"      

答案 2 :(得分:-1)

j数据框中的向量还是变量?

如果j在您只需要的数据框中是可变的:

df[is.na(df$j)] <- 0         # change all NAs to zero
df[df$j == "missing"] <- 0   # for strings (character values)