【发布时间】:2015-03-24 11:06:37
【问题描述】:
我有一个数据框,其中包含一些模棱两可的观察名称,并希望为它们添加一些分类。我遇到的一个问题是,一些观察名称与我想要分配的多个类匹配,所以我决定为每个类添加一个列,并根据观察是否与此相关,用 True/False 填充它上课与否。
这是一个示例数据框:
col1 <- c(1:8)
col2 <- c("aa", "bb", "ab", "ba")
df <- data.frame(col1,col2)
所以
col1 col2
1 1 aa
2 2 bb
3 3 ab
4 4 ba
5 5 aa
6 6 bb
7 7 ab
8 8 ba
我拥有的类标准向量是:
Class1 <- "aa" # A Only
Class2 <- "bb" # B Only
Class3 <- c("ab", "ba") # Diff symbols
Class4 <- c("ab", "ba", "aa") # All A
Class5 <- c("ab", "ba", "bb") # All B
我打算通过一个循环来解决我的问题,该循环将在每个回合填充数据框中的一个新列,将 Col2 值与相应向量中的标准匹配。
Classes <- list(Class1, Class2, Class3, Class4, Class5)
ClassName <- c("A Only", "B Only", "Diff symbols", "All A", "All B")
for (i in 1:length(ClassName)){
df[df$col2 %in% Classes[i], 2 + i] <- "x"
}
names(df)[3:7] <- ClassName
现在这就是问题所在 - 只有长度为一个的向量在循环中正常工作。
col1 col2 A Only B Only Diff symbols All A All B
1 1 aa x <NA> <NA> <NA> <NA>
2 2 bb <NA> x <NA> <NA> <NA>
3 3 ab <NA> <NA> <NA> <NA> <NA>
4 4 ba <NA> <NA> <NA> <NA> <NA>
5 5 aa x <NA> <NA> <NA> <NA>
6 6 bb <NA> x <NA> <NA> <NA>
7 7 ab <NA> <NA> <NA> <NA> <NA>
8 8 ba <NA> <NA> <NA> <NA> <NA>
Class3-Class5 出于某种原因没有产生任何结果,即使认为如果在外部循环中使用它们也可以正常工作 - 例如:
df[df$col2 %in% Class3, 5] <- "x"
col1 col2 A Only B Only Diff symbols All A All B
1 1 aa x <NA> <NA> <NA> <NA>
2 2 bb <NA> x <NA> <NA> <NA>
3 3 ab <NA> <NA> x <NA> <NA>
4 4 ba <NA> <NA> x <NA> <NA>
5 5 aa x <NA> <NA> <NA> <NA>
6 6 bb <NA> x <NA> <NA> <NA>
7 7 ab <NA> <NA> x <NA> <NA>
8 8 ba <NA> <NA> x <NA> <NA>
我认为我使用列表的方式有问题,但我找不到答案。
非常感谢有人分享见解!
【问题讨论】: