我试图在循环中使用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
答案 0 :(得分:0)
正如评论中所提到的,这里不需要循环。
此外,这似乎是一个可以使用within
的好例子
> ( trunc <- within(df, { b <- strtrim(a, 7); rm(a) }) )
# b
# 1 NEW0057
# 2 NEW0058
# 3 NEW0059
# 4 NEW0060