【发布时间】:2020-04-28 01:24:49
【问题描述】:
我想知道是否有一种方法可以使用 for 循环中的 mutate() 函数从 R 中的列表创建多个列。
这是我的意思的一个例子:
问题:
我有一个数据框df,它有 2 列:类别和评级。我想为df$category 的每个元素添加一列,并且在该列中,如果类别列与迭代器匹配,我想要一个 1。
library(dplyr)
df <- tibble(
category = c("Art","Technology","Finance"),
rating = c(100,95,50)
)
手动做,我可以做:
df <-
df %>%
mutate(art = ifelse(category == "Art", 1,0))
但是,当我有 50 个类别时会发生什么? (这与我原来的问题很接近。这需要很长时间!)
我尝试了什么:
category_names <- df$category
for(name in category_names){
df <-
df %>%
mutate(name = ifelse(category == name, 1,0))
}
不幸的是,它似乎不起作用。
我会很感激任何关于这个主题的信息!
完整代码:
library(dplyr)
#Creates tibble
df <- tibble(
category = c("Art","Technology","Finance"),
rating = c(100,95,50)
)
#Showcases the operation I would like to loop over df
df <-
df %>%
mutate(art = ifelse(category == "Art", 1,0))
#Creates a variable for clarity
category_names <- df$category
#For loop I tried
for(name in category_names){
df <-
df %>%
mutate(name = ifelse(category == name, 1,0))
}
我知道我实际上在做的是model.matrix() 的一种形式;然而,在我发现这个功能之前,我仍然很困惑为什么我之前做的事情不起作用。
【问题讨论】: