R Добавить строку к значениям, но не последний - PullRequest
0 голосов
/ 16 марта 2020
data=data.frame("v1" = as.character(c("ab", "cd", "qx", "ef", "hg", "ba", "ab", "cd")),
                "v2" = 1:8)
paste0(data$v1, "x")
[1] "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx" "cdx"
WANT: "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx" "cd"

I wi sh, чтобы добавить букву x в конец всех значений 'v1', кроме последнего. Я показал свое испытание и то, что оно дает, а затем "ХОЧУ", что я и хочу получить.

Ответы [ 5 ]

4 голосов
/ 16 марта 2020

Это то, что вы ищете?

paste0(data$v1[1:(length(data$v1) - 1)], "x")

[1] "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx"

Чтобы включить последний элемент, добавьте его к вышеуказанной функции:

c(paste0(data$v1[1:(length(data$v1) - 1)], "x"), as.character(data$v1[length(data$v1)]))

[1] "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx" "cd"
4 голосов
/ 16 марта 2020

Вы можете сделать:

c(paste0(head(data$v1, -1), "x"), tail(data$v1, 1))

[1] "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx" "cd" 

Вам необходимо импортировать данные, используя stringsAsFactors = FALSE.

3 голосов
/ 16 марта 2020

Если вы хотите добавить его в качестве нового столбца. Используя data.table мы можем сделать:

library(data.table)

setDT(data)[, v3 := v1]
data[-.N, v3 := paste0(v1, "x")]

data
#   v1 v2  v3
#1: ab  1 abx
#2: cd  2 cdx
#3: qx  3 qxx
#4: ef  4 efx
#5: hg  5 hgx
#6: ba  6 bax
#7: ab  7 abx
#8: cd  8  cd
1 голос
/ 16 марта 2020

Вот базовое решение R с ifelse + paste0:

paste0(data$v1,ifelse(seq(nrow(data))!=nrow(data),"x",""))

, что дает

[1] "abx" "cdx" "qxx" "efx" "hgx" "bax" "abx" "cd" 
0 голосов
/ 16 марта 2020

Мы можем использовать tidyverse подход

library(dplyr)
library(tidyr)
data %>% 
   mutate(new = case_when(row_number() < n() ~str_c(v1, 'x'),
       TRUE ~ as.character(v1)))
#  v1 v2 new
#1 ab  1 abx
#2 cd  2 cdx
#3 qx  3 qxx
#4 ef  4 efx
#5 hg  5 hgx
#6 ba  6 bax
#7 ab  7 abx
#8 cd  8  cd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...