使用条件将值替换为上一行

标签 r substring str-replace data-manipulation

我想获取 ID 列不以 00 开头的数据,并将 ID 列的此值附加到上一行中描述列的末尾。

然后将其余值替换到上一行中的名称列之后。我如何使用 R 做到这一点?

这是虚拟数据的来源:https://docs.google.com/spreadsheets/d/1SbmaM8hXck-z5nsNfDMbhwijvAGPkPPBgQ_eY4JAMC8/edit?usp=sharing

ID      Year    Description  Name   User       Factor_1  Factor_2   Factor_3
0011    2016    blue colour  AA     James      Xfac      NA         NA
is nice XXX     XLM          Yfac   different  Yfac      NA         NA
0024    2017    red colour   DD     Mark       Zfac      NA         NA
is good YYY     STM          Lfac   unique     Zfac      NA         NA

我想要的:

ID      Year    Description          Name   User  Factor_1   Factor_2   Factor_3
0011    2016    blue colour is nice  XXX    XLM   Yfac       different  Yfac
0024    2017    red colour is good   YYY    STM   Lfac       unique     Zfac

最佳答案

第一个部分是您要将描述粘贴在一起的部分,
还有一个部分是您要移动变量的部分,因为您希望“用户”列中的“XXX”和“YYY” .

此外,在 Viveks answer 中,所有错误的行都粘贴了所有“正确”的行,这在您的示例中有效,但如果您有几行正确的行,然后是错误的行,则不会。 使用 bool 值 (TRUE/FALSE) 有时效果很好,但在这种情况下,我认为您想使用整数索引,因为这样可以更轻松地引用“上一行”。这给了我代码:

rmlines <- which(!substr(df$ID,1,2)=="00")
df$Description[rmlines-1] <- paste(df$Description[rmlines-1], df[rmlines,1], sep=" ")
df[rmlines-1, 4:8] <- df[rmlines, 2:6]
df <- df[-rmlines,]

但还有一个问题需要考虑:您的列是什么类别?
当我尝试时,我将所有内容都视为一个字符,这意味着您可以很好地移动列。在您的数据中,有些可能是因素或其他因素,因此您可能想要更改类别。我认为最简单的方法是先将其全部更改为字符,然后再将其(返回)更改为您希望列成为的最终类。

# To change everything to character:
df <- as.data.frame(lapply(df, as.character), stringsAsFactors = FALSE)
# And to assign the right classes, you need to decide case-by-case:
df$Year <- as.integer(df$Year)
df$Factor_1 <- as.factor(df$Factor1) # Optionally provide levels

关于使用条件将值替换为上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53594080/

相关文章:

r - 在已经存储在 Shiny 服务器上的文件中进行选择

r - R 中的 rlang 中的 expr 和 exprs 类是不同的!为什么?

r - Lintr - 有没有办法抑制大写数据框列名称警告?

c - 从 C 中的一行中保存多次出现的 strstr() ?

c++ - C++ 中 char* 中的子字符串,strtok 到行尾

php - 为什么mysql数据库在这种情况下没有更新?

javascript - R DT :datatable remove . 无页脚边框底部

regex - 在 R 中提取字符串的一部分

php - 为什么 str 替换仅在第一个匹配中起作用?

javascript - 用相同的命名变量替换字符串