R - 使用双括号和单括号在 for 循环中对数据帧进行子集化

标签 r for-loop square-bracket

我正在尝试创建一个 for 循环,将字符串附加到数据框中的每个数据点。我使用 for 循环,因为数据框可能随列数的变化而变化。这是可能的数据框的示例。

lexicon <- data.frame(
    X.lx = c("word", "word2", "word3"),
    X.ph = c("phonetic", "", "phonetic2")
)

我设法创建了一个循环,该循环获取列的名称并将其附加到数据点(数据存储在数据框lexicon中:

for(i in names(lexicon)){
   lexicon[[i]] <- sub("^", paste(names(lexicon[i]), " ", sep=""), lexicon[[i]])
}

这会产生:

  X.lx        X.ph
1 X.lx word   X.ph phonetic
2 X.lx word2  X.ph 
3 X.lx word3  X.ph phonetic2

我试图设置循环,例如数据框中的空数据点被sub()跳过,但没有成功。期望的输出是

  X.lx        X.ph
1 X.lx word   X.ph phonetic
2 X.lx word2   
3 X.lx word3  X.ph phonetic2

这是我的试用代码:

for(i in names(lexicon)){
   lexicon[[i]][which(lexicon[[i]] != "")] <- sub("^", paste(names(lexicon[i]), " ", sep=""), lexicon[[i]][which(lexicon[[i]] != "")])
}

我收到此警告:

Warning messages:
1: In `[<-.factor`(`*tmp*`, which(lexicon[[i]] != ""), value = c(NA_integer_,  :
invalid factor level, NA generated

如何正确实现要跳过的空单元格?

最佳答案

lexicon[] <- mapply(function(x, n) {
  ifelse(x == "", "", paste(n, x))
}, lexicon, names(lexicon))
lexicon
#         X.lx           X.ph
# 1  X.lx word  X.ph phonetic
# 2 X.lx word2               
# 3 X.lx word3 X.ph phonetic2

关于R - 使用双括号和单括号在 for 循环中对数据帧进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666170/

相关文章:

r - 使用 dplyr 和 mutate 计算满足条件的列数

java - Java Swing 中使用索引的 For 循环

python - 如何更改Python中for循环的计数器?

python - Python中为什么写round(x[,n])而不写round(x,n)?

r - SparkR foreach 循环

r - 如何在线托管 R 传单 map

r - 用R中的十六进制值绘制颜色

java - 在 for 循环中绘制图像 x 次

regex - Bash 双括号正则表达式比较使用负先行错误返回 2

c# - 如何确定 "x[]"可能抛出哪些异常?