在循环中修剪和填充数据框

时间:2014-07-05 04:58:15

标签: r loops for-loop dataframe trim

我试图在循环中使用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

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,这里不需要循环。

此外,这似乎是一个可以使用within的好例子

> ( trunc <- within(df, { b <- strtrim(a, 7); rm(a) }) )
#         b
# 1 NEW0057
# 2 NEW0058
# 3 NEW0059
# 4 NEW0060