Добавить шаблон для каждой строки по-другому в кадре данных - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть фрейм данных (df), в котором есть столбец (c1), который выглядит следующим образом:

c1

AA
AA
BB
BB
CC
CC
DD
DD

Я хотел бы получить такой вывод

c1

AA_1
AA_2
BB_1
BB_2
CC_1
CC_2
DD_1
DD_2

Iпрямо сейчас есть код для добавления определенного шаблона во все строки:

strsplit(paste(df$c1, collapse='_1 '), ' ')[[1]] 

Однако, как я могу добавить шаблон "_1" для всех нечетных строк и шаблон "_2" для всех четныхстроки?

Любая помощь высоко ценится

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Это решение dplyr.

df %>% mutate(c2 = paste(c1, 1:2, sep = "_"))

  c1   c2
1 AA AA_1
2 AA AA_2
3 BB BB_1
4 BB BB_2
5 CC CC_1
6 CC CC_2

Вот базовый способ @RonakShah:

with(df, paste(c1, 1:2, sep = "_"))
# [1] "AA_1" "AA_2" "BB_1" "BB_2" "CC_1" "CC_2"

# data
df <- data.frame(c1 = c("AA", "AA", "BB", "BB", "CC", "CC"), stringsAsFactors = F)
0 голосов
/ 17 февраля 2019

, чтобы быть в безопасности и обрабатывать случаи, когда нет четного количества записей, вы можете сделать следующее:

library(tidyverse)

# define data; has some 'odd' cases
df <- data.frame(c1 = c("AA", "AA", "BB", "BB", "CC", "CC", "DD", "DD", "DD", "EE"), 
                 stringsAsFactors = FALSE
)

# split the data by 'c1' and then add a suffix based on the number of entries
result <- df %>%
  group_by(c1) %>%
  mutate(new_C1 = paste0(c1, "_", seq(n())))

> result
# A tibble: 10 x 2
# Groups:   c1 [5]
   c1    new_C1
   <chr> <chr> 
 1 AA    AA_1  
 2 AA    AA_2  
 3 BB    BB_1  
 4 BB    BB_2  
 5 CC    CC_1  
 6 CC    CC_2  
 7 DD    DD_1  
 8 DD    DD_2  
 9 DD    DD_3  
10 EE    EE_1  
0 голосов
/ 16 февраля 2019

Попробуйте:

df$ID=c(1:nrow(df))
df$New_C1<-ifelse(df$ID%%2!=0,paste0(df$c1,"_1"),paste0(df$c1,"_2"))
df

Или, если вам нужно перезаписать, то:

df$ID=c(1:nrow(df))
df$c1<-ifelse(df$ID%%2!=0,paste0(df$c1,"_1"),paste0(df$c1,"_2"))
df$ID<-NULL

Результат:

    c1
1 AA_1
2 AA_2
3 BB_1
4 BB_2
5 CC_1
6 CC_2
7 DD_1
8 DD_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...