重命名列/变量值(在某些行中)

时间:2017-06-21 13:36:02

标签: r dplyr

我有下表(实际上还有更多行):

country         sessions     rank    
United Kingdom   100846        1    
Spain             80628        2    
Italy              7628        3    
USA                6628        4     
France             1328        5     
China              1228        6     
Japan              1128        7     
Russia             1028        8     
Japan               928        9     
Greece              828        10
Colombia            728        11     
Brasil              628        12     
Portugal             28        13 

我想将国家FranceChinaJapanRussia,...和Portugal重命名为Other。 有没有办法按行号或等级或会话等条件重命名这些国家? 谢谢

3 个答案:

答案 0 :(得分:1)

这应该这样做。

df$country <- ifelse(df$session < 1300, "Other", df$country)

答案 1 :(得分:0)

some.table %>%
  mutate(country = ifelse(rank <= 4, country, "Other"))

答案 2 :(得分:0)

假设country是一个因子变量,在基数R中,您可以将levels<-与子集[一起使用两次以获得此目标。

使用会话&lt;的标准1300,

levels(dat$country)[dat$country][dat$sessions < 1300] <- "Other"

使用排名&gt;的标准5

levels(dat$country)[dat$country][dat$rank > 5] <- "Other"

第一个[[dat$country]重新排序水平以适应data.frame的顺序,第二个根据所需标准执行子集化。

数据

dat <-
structure(list(country = structure(c(11L, 10L, 6L, 12L, 4L, 2L, 
7L, 9L, 7L, 5L, 3L, 1L, 8L), .Label = c("Brasil", "China", "Colombia", 
"France", "Greece", "Italy", "Japan", "Portugal", "Russia", "Spain", 
"United Kingdom", "USA"), class = "factor"), sessions = c(100846L, 
80628L, 7628L, 6628L, 1328L, 1228L, 1128L, 1028L, 928L, 828L, 
728L, 628L, 28L), rank = 1:13), .Names = c("country", "sessions", 
"rank"), class = "data.frame", row.names = c(NA, -13L))