我有一个简单的数据框:
> var_body_part <- c("eye and nose", "eye", "eye and ear", "eye and mouth", "foot", "foot", "ear", "ear", "foot", "mouth")
> var2 <- c("bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla")
> temp_df <- data.frame(var_body_part, var2)
所以我的数据是:
> temp_df
var_body_part var2
1 eye and nose bla
2 eye bla
3 eye and ear bla
4 eye and mouth bla
5 foot bla
6 foot bla
7 ear bla
8 ear bla
9 foot bla
10 mouth bla
每次我找到“眼睛”时,我都想用HEAD替换行 即(请参阅前4行)
var_body_part var2
1 HEAD bla
2 HEAD bla
3 HEAD bla
4 HEAD bla
5 foot bla
6 foot bla
7 ear bla
8 ear bla
9 foot bla
10 mouth bla
应该很容易... 我选择受
转换影响的行temp_df$var_body_part[grep("eye", temp_df$var_body_part) ]
但是我找不到正确的语句以将其替换为正确的值“ HEAD”。
到目前为止,我的尝试很多。
invalid factor level, NA generated
有人可以帮忙吗?
答案 0 :(得分:3)
问题实际上是在创建temp_df时将列转换为factor
。只需使用stringsAsFactors = FALSE
,您就可以使用了:
temp_df <- data.frame(var_body_part, var2, stringsAsFactors = FALSE)
temp_df$var_body_part[grep("eye", temp_df$var_body_part)] <- "HEAD"
如果要使用因素,可以将{HEAD}添加到var_body_part
的级别:
temp_df <- data.frame(var_body_part, var2, stringsAsFactors = TRUE)
levels(temp_df$var_body_part) <- c(levels(temp_df$var_body_part), "HEAD")
temp_df$var_body_part[grep("eye", temp_df$var_body_part)] <- "HEAD"
答案 1 :(得分:2)
您可以将transform
与sub
一起使用:
transform(temp_df, var_body_part = sub(".*eye.*", "HEAD", var_body_part))
结果:
var_body_part var2
1 HEAD bla
2 HEAD bla
3 HEAD bla
4 HEAD bla
5 foot bla
6 foot bla
7 ear bla
8 ear bla
9 foot bla
10 mouth bla
答案 2 :(得分:0)
使用gsub()
非常简单:
mutate_at(temp_df, 'var_body_part', funs(gsub('.*eye.*', 'HEAD', .)))