R: Объединение двух столбцов в один столбец с уникальными значениями - PullRequest
0 голосов
/ 23 апреля 2020

Буду признателен за помощь в объединении двух столбцов в один столбец при сохранении новых значений уникальными. Я пытался найти решение этой проблемы, но, поскольку я ужасно разбираюсь в R, возможно, будет лучше, если кто-то покажет правильный путь к дотису.

Допустим, у меня есть такой набор данных:

place   year
A   2018
A   2018
B   2018
C   2018
C   2018
C   2019
C   2019

Я хотел бы создать новый столбец (переменную), который объединяет оба столбца (место и год), но добавляет суффикс числового значения c в случае повторений. Например, C имеет два случая 2018 и 2019. Мне бы хотелось, чтобы новое значение новой переменной было «C_2018.1» и «C_2018.2», если это имеет смысл. Я знаю, как объединять переменные в строки, но я не уверен, что добавляю количество неуникальных значений. Может быть, мне нужны петли?

data$new_v <- paste(data$place, data$year, sep = "_")

Надеюсь, это имеет достаточный смысл, и это должно быть довольно легко, я думаю.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Циклы могли бы быть проще, но ...

data$ctr = unlist(sapply(table(data$new_v), function(n)1:n))

И тогда вы могли бы сделать

data$new_v <- paste(data$new_v, data$ctr, sep = ".")

Это оставило бы вас с одиночками (такими как B), все еще имеющими .1

0 голосов
/ 23 апреля 2020
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="_")]
0 голосов
/ 23 апреля 2020

Вы можете решить это с помощью dplyr:

data %>%
  group_by(place, year) %>%
  mutate(new_v = paste0(place, "_", year, ".", row_number()))

Предложение group_by заставляет row_number() считать в группах, начиная с 1.

...