R: Копирование текстовых значений из ячейки кадра данных в другую ячейку другого кадра данных. - PullRequest
0 голосов
/ 24 апреля 2018

Мои искренние извинения за изменение содержания вопроса, но я только что понял, что проблема не в циклах (я получал плохие результаты, и я сначала предположил, что что-то не так в циклах. Мои искренние извинения за это).Поэтому я сейчас пишу актуальную проблему:

Я хочу перевести текстовое значение ячейки кадра данных в другое текстовое значение ячейки другого кадра данных.

Например:

dataframe1:

id text
1  athens
2  greece

dataframe2:
id  wordmatch
1   NA
2   NA

Я использую следующую команду:

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

Но вместо значения "athens" в dataframe2 $ wordmatch [1] у меня есть значение "1".

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Ваш код работал для моего теста.

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)
  }
}

Вам не нужно указывать i и d перед их использованием в цикле.

Вывод моего примера, как и ожидалось:

[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 вместо этого? Возможно, вам следует проверить код на наличие ошибок в случае чувствительности к регистру.

0 голосов
/ 25 апреля 2018

Я нашел ответ. Необходимо использовать функцию paste ()

dataframe2$wordmatch[1] <- paste(dataframe1$text[1])
0 голосов
/ 24 апреля 2018

Новый ответ:

Это неожиданное поведение вызвано тем, что текстовый столбец 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"

Обратите внимание, что вам не нужно инициализировать переменные цикла i и j. Надеюсь, это поможет.

...