Я пытаюсь скопировать данные из одного фрейма данных в другой фрейм данных, используя strtrim
в цикле.Обрезка и заполнение кадра данных в цикле
df <- data.frame(a = c("NEW0057-1", "NEW0058-2", "NEW0059-3", "NEW0060-4"))
trunc <- data.frame(matrix(nrow=nrow(df), ncol=1))
names(trunc) <- "b"
for (i in nrow(df)){
trunc[i,] <- strtrim(df[i,], 7)
}
head(trunc)
Над дает:
b
1 <NA>
2 <NA>
3 <NA>
4 NEW0060
Однако я ищу следующий результат:
b
1 NEW0057
2 NEW0058
3 NEW0059
4 NEW0060
thread here говорит, что предварительное выделение кадра данных не рекомендуется. Я думаю, что это больше для эффективности и не должно вызывать тип результата, который я получаю выше. В любом случае я попытался использовать список в качестве предложения и получил аналогичный результат:
df <- data.frame(a = c("NEW0057-1", "NEW0058-2", "NEW0059-3", "NEW0060-4"))
trunc <- list()
for (i in nrow(df)){
trunc[[i]] <- strtrim(df[i,], 7)
}
df = do.call("rbind", trunc)
Я ценю ваше время.
R версия 3.0.3
Я не понимаю, почему вы используете петлю на всех здесь. 'strtrim (df $ a, 7)' должен обрезать все значения сразу. Если вы хотите создать новый data.frame из этого, используйте 'trunc <- data.frame (b = strtrim (df $ a, 7))' – MrFlick
Попробуйте 'for (i in 1: nrow (df))'. Вам не хватает части «1:». Тем не менее, @MrFlick прав. – Jota
Вы оба очень правы! Я скучаю по этому. Спасибо за указатель. – sedeh