【发布时间】:2022-01-23 09:09:57
【问题描述】:
我正在使用 R 编程语言。假设我有以下数据:
var1 <- rnorm(100,10,1)
var2 <- rnorm(100,10,10)
var3 <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
var4 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.5, 0.25, 0.25, 0.25) )
var5 <- sample( LETTERS[1:3], 100, replace=TRUE, prob=c(0.5, 0.25, 0.25) )
d1 = data.frame(var1, var2, var3, var4, var5)
d2 = data.frame(var1 = 0, var2 = 0, var3 = 0, var4 = 0, var5 = 0)
old_data = rbind(d1,d2)
var1 var2 var3 var4 var5
1 8.932176 11.1764660 B B C
2 9.782025 0.5252539 A A B
3 8.973996 5.0944256 A B B
4 9.271109 7.4390781 B A A
5 9.374961 28.4386201 A D A
6 8.313307 3.4805010 A B C
现在,假设我有一行新数据:
new_data = data.frame(var1 = 2, var2 = 3, var3 = "A", var4 = "GG", var5 = "L")
我的问题:对于“new_data”中的所有因子变量(即 var3、var4、var5),如果这些变量包含“old_data”中未包含的值 - 那么我想将它们设为 0。
我尝试手动执行此操作:
#first, list all values of each factor variable
> table(old_data$var3)
0 A B
1 52 48
> table(old_data$var4)
0 A B C D
1 43 18 15 24
> table(old_data$var5)
0 A B C
1 50 25 25
#next, write the replacement function
ifelse(new_data$var3 != "A" & new_data$var3 != "B", new_data$var3 == 0, new_data$var3 == new_data$var3 )
ifelse(new_data$var4!= "A" & new_data$var4 != "B" & new_data$var4 != "C" & new_data$var4 != "D", new_data$var4 == 0, new_data$var4 == new_data$var4 )
ifelse(new_data$var5!= "A" & new_data$var5 != "B" & new_data$var5 != "C" , new_data$var5 == 0, new_data$var5 == new_data$var5 )
但我认为上述方法行不通。此外,如果有很多因素变量,并且每个因素变量都有许多可能的水平,这也不是一个非常有效的方法。
有人可以告诉我怎么做吗?
谢谢!
【问题讨论】:
标签: r data-manipulation