繁体   English   中英

R:将两列合并为具有唯一值的单列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM