gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:21:14 24 4
gpt4 key购买 nike

我正在尝试创建一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com