0
我試圖在一個循環中使用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
嘗試'(i in 1:nrow(df))'。你錯過了'1:'部分。也就是說,@MrFlick是對的。 – Jota
你們倆都很正確!我錯過了。感謝指針。 – sedeh