【问题标题】:R: Copying text values from a cell of a dataframe to another cell of another dataframeR:将文本值从数据框的一个单元格复制到另一个数据框的另一个单元格
【发布时间】:2018-04-24 11:40:41
【问题描述】:

对于更改问题的内容,我深表歉意,但我刚刚意识到问题不在于循环(我收到了不好的结果,我最初认为循环有问题。对此我深表歉意)。所以我现在正在写实际的问题:

我想将一个数据框单元格的文本值转移到另一个数据框单元格的另一个文本值中。

例如:

dataframe1:

id text
1  athens
2  greece

dataframe2:
id  wordmatch
1   NA
2   NA

我正在使用以下命令:

dataframe2$wordmatch[1] <- dataframe1$text[1]

但 dataframe2$wordmatch[1] 中的值不是“athens”,而是值“1”。

【问题讨论】:

  • 这听起来像是 XY 问题。如果我是你,我会描述实际问题,看看你是否可以首先尝试避免在循环情况下出现循环。

标签: r loops repeat


【解决方案1】:

新答案:

这种意外行为是由于df1的文本列可能是factor,而不是character,要验证,试试class(df1$text)。您可以通过以下方式解决您的问题

df1$text <- as.character(df1$text)

dataframe2$wordmatch[1] <- as.character(dataframe1$text[1])

希望这会有所帮助。


关于循环的旧答案:

是的,应该没问题。一个可行的例子是:

df = data.frame(nofdelet=c(2,3,4,2))

my_func <- function(i,j)
{
  print(paste0('i: ', i, ', j: ', j))
}

for(i in 1:nrow(df))
{
  for (j in 1:df$nofdelet[i])
  {
    my_func(i,j)
  }
}

哪个输出:

[1] "i: 1, j: 1"
[1] "i: 1, j: 2"
[1] "i: 2, j: 1"
[1] "i: 2, j: 2"
[1] "i: 2, j: 3"
[1] "i: 3, j: 1"
[1] "i: 3, j: 2"
[1] "i: 3, j: 3"
[1] "i: 3, j: 4"
[1] "i: 4, j: 1"
[1] "i: 4, j: 2"

请注意,您不必初始化循环变量ij。希望这会有所帮助。

【讨论】:

  • 谢谢弗洛里安,但在我的情况下它不起作用。我将编辑问题并添加我正在使用的确切代码。
【解决方案2】:

您的代码适用于我的测试用例。

repetition <- c(1, 2, 3, 4, 5)
df <- data.frame(repetition)

for(i in 1:length(repetition)){
  for(d in 1:df$repetition[i]){
    print(i)
  }
}

您无需在循环中使用id 之前指定它们。

我的例子的输出和预期的一样:

[1] 1
[1] 2
[1] 2
[1] 3
[1] 3
[1] 3
[1] 4
[1] 4
[1] 4
[1] 4
[1] 5
[1] 5
[1] 5
[1] 5
[1] 5

E:我刚刚注意到您的代码使用了for( i in 1:nrow(Sample)){。不应该是sample 吗?也许您应该检查代码是否区分大小写。

【讨论】:

  • 谢谢pandayo,但在我的情况下它不起作用。我将添加我使用的确切代码。
  • 您的 dataframe1 在创建时是否包含stringsAsFactors = F?必须使用 paste() 可能是将字符串作为因子保存在数据框中的结果。
【解决方案3】:

我找到了答案。需要用到函数paste()

dataframe2$wordmatch[1] <- paste(dataframe1$text[1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2020-08-27
    • 2020-03-30
    • 2018-01-16
    • 1970-01-01
    • 2012-08-04
    • 2021-10-29
    相关资源
    最近更新 更多