如何根据条件创建新变量

时间:2016-06-13 04:10:28

标签: r variables

数据文件名:玩具

假设我有以下数据框

ID    Name
1     Green Ball
2     Red Ball
3     Blue Bat
4     Green Bat
5     Blue Ball
6     Ball
7     Bat

我想通过搜索名称中的颜色来添加一个新变量“Color”。

ID    Name           Color
1     Green Ball     Green
2     Red Ball       Red
3     Blue Bat       Blue
4     Green Bat      Green
5     Blue Ball      Blue
6     Ball           Other
7     Bat            Other

我从未使用过R并且不确定如何去做这件事。我试过这个,但没有运气。

toys$Color <- (
if toys$Name = "Green", Color "Green"
else if toys$Name = "Red", Color "Red"
else if toys$Name = "Blue, Color "Blue"
else toys$Name = "Other"
)

我真的很感激这方面的一些帮助。

由于

2 个答案:

答案 0 :(得分:3)

我们可以使用str_extract。创建所有颜色的vector('col1'),使用str_extract通过paste the 'col1' as a single string separated by获取'name'中与'col1'中的元素匹配的子字符串} | . Replace the NA`元素输出到'Other'以创建新列'Color'。

library(stringr)
col1 <- c("Green", "Red", "Blue")
v1 <- str_extract(toys$Name, paste(col1, collapse="|"))
v1[is.na(v1)] <- "Other"
toys$Color <- v1
toys
#  ID       Name Color
#1  1 Green Ball Green
#2  2   Red Ball   Red
#3  3   Blue Bat  Blue
#4  4  Green Bat Green
#5  5  Blue Ball  Blue
#6  6       Ball Other
#7  7        Bat Other

答案 1 :(得分:1)

颜色数量有限,因此您可以创建这些颜色的列表。然后使用您需要安装的包str_detect中的stringr。此功能允许您检测字符串中是否存在图案(颜色)。我们使用循环将此函数应用于df中的每个元素。

df <- as.data.frame(c("Green Ball", "Ball", "Red Ball", "Blue Bat", "White cake", "Deep Purple"))
colnames(df) <- "Items"
colors <- c("Green", "Red", "Blue", "Purple", "Yellow", "White", "Black", "Pink")

library(stringr)
result <- NULL
for (i in 1:NROW(df)){
  true.false <- str_detect(as.character(df[i,1]), colors)
  col <- ifelse(any(true.false), colors[true.false], "No color")
  result <- c(result, col)
}

df$Colors <- result
df
        Items   Colors
1  Green Ball    Green
2        Ball No color
3    Red Ball      Red
4    Blue Bat     Blue
5  White cake    White
6 Deep Purple   Purple

<强>替代: 您也可以在上述for循环中使用它。

library('stringi')
stri_detect_fixed("Deep Purple", c("Purple", "Blue"))
#[1]  TRUE FALSE