我难以在R Studio中将多个因子级别分解为一个特定变量的三个因子级别。
我的出发点是data.table
,其中包含250个变量和大约4,000行。对于一个因子变量,我想将其75个级别分解为3个级别。此外,在75个级别中,有4个级别应被忽略(或之前设置为NA),因为它们包含有争议的信息。此因子变量基于调查答案,其中还包括文本格式的单个答案。有时甚至语言也有所不同。所以,这有点混乱。
我试图以两种不同的方式将这75个级别(如果各个观测值之前设置为NA,则将其缩小为71个级别)。但是,R在控制台中始终返回+
而不是>
,并且我无法继续执行任何其他命令。当然,我可以通过按Esc
来停止此操作,但这并不能帮助我收到想要的结果。
因此,这个虚构的示例应显示我尝试过的内容:
1,使用levels
和list
功能
levels(dt$x) <- list("No"=c("I don't allow anything", "..."),
"Yes"= c("Number of visitors ,annual sales, sales growth, number of customers", "Net sales", "..."),
"Maybe"=c("The CEO's approval is needed.", "To be discussed"))
2]使用forcats
包
dt$x %>%
fct_collapse(No= c("I don't allow anything", "..."),
Yes= c("Number of visitors ,annual sales, sales growth", "number of customers", "Net sales", "..."),
Maybe=c("The CEO's approval is needed.", "To be discussed"))
我认为问题是由于原始变量的结构而引起的。有谁知道我该如何解决?
非常感谢您!
最好,伊尔卡
dt $ x当然是一个“因素”。要将不同的值分配给因子列,您应该首先将数据转换为“字符”类型
class(dt$x) # should be factor
dt$x <- as.character(dt$x)
class(dt$x) # should be "character"
# a list of collapsed Categories
toCollapseCategories <- list(
"No"=c("I don't allow anything", "..."),
"Yes"= c("Number of visitors ,annual sales, sales growth, number of customers", "Net
sales", "..."),
"Maybe"=c("The CEO's approval is needed.", "To be discussed")
)
dt$x[dt$x %in% toCollapseCategories$No] <- "No"
dt$x[dt$x %in% toCollapseCategories$Yes] <- "Yes"
dt$x[dt$x %in% toCollapseCategories$Maybe] <- "Maybe"
# and then get a factor
dt$x <- as.factor(dt$x)
class(dt$x) # factor
当然,代码可以优化,但dt $ x应该是字符,以便替换元素
我的一个朋友实际上提供了答案。与数据结构无关。
此工作:
dt$x <- fct_collapse(dt$x,
No = c(
"I don't allow anything",
"..."),
Yes= c(
"Number of visitors ,annual sales, sales growth",
"number of customers",
"Net sales",
"..."),
Maybe= c(
"The CEO's approval is needed.",
"To be discussed")
)
我仍然不知道为什么第一个选项不起作用(它对另一个变量起作用)。