[英]R: Uniting two columns into a single column with unique values
感谢您帮助将两列合并为一列,同时保持新值的唯一性。 我试图找到解决这个问题的方法,但由于我不擅长在 R 中执行循环,所以如果有人能显示出正确的方法可能会更好。
假设我有一个这样的数据集:
place year
A 2018
A 2018
B 2018
C 2018
C 2018
C 2019
C 2019
我想创建一个新列(变量),它结合了两列(地点和年份),但在重复的情况下添加了一个数字后缀。 例如,C 有 2018 年和 2019 年两种情况。如果有意义的话,我希望新变量的新值为“C_2018.1”和“C_2018.2”。 我知道如何将变量组合成字符串,但添加非唯一值的数量是我不确定的。 也许我需要循环?
data$new_v <- paste(data$place, data$year, sep = "_")
我希望这有足够的意义,我猜应该很容易。
循环可能更容易,但......
data$ctr = unlist(sapply(table(data$new_v), function(n)1:n))
然后你可以做
data$new_v <- paste(data$new_v, data$ctr, sep = ".")
这将使您的单身人士(如 B)仍然拥有 a.1
您可以使用 dplyr 解决此问题:
data %>%
group_by(place, year) %>%
mutate(new_v = paste0(place, "_", year, ".", row_number()))
group_by
子句导致row_number()
在组内计数,从 1 开始。
df <- data.frame(place=c("A","A","B","C","C","C","C"),year=c(2018,2018,2018,2018,2018,2019,2019))
df <- data.table(df)
df[,counter:=seq(.N),by=c("place","year")]
df[,new_var:=paste(place,year,counter,sep="_")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.