【发布时间】:2016-03-14 18:43:27
【问题描述】:
我有一个包含四个数据框的列表。每个数据框都有相同的第一列 person.id(每个数据框的唯一键)我想填充零。
问题:
代码运行但输出到控制台并且不会更改列表中的实际数据帧。
示例数据:
df1 <- data.frame(person.id = 3200:3214, letter = letters[1:15])
df2 <- data.frame(person.id = 4100:4114, letter = letters[8:22])
df3 <- data.frame(person.id = 4300:4314, letter = letters[10:24])
df4 <- data.frame(person.id = 5500:5514, letter = letters[5:19])
dataList <- list(df1, df2, df3, df4)
lapply(dataList, function(i){
i$person.id <- str_pad(i$person.id, 6, pad = "0")
})
# Console output pads the zeros (not expected):
[[1]]
[1] "003200" "003201" "003202" "003203" "003204" "003205" "003206" "003207" "003208"
[10] "003209" "003210" "003211" "003212" "003213" "003214"
# Data Frames in list return with no change:
> dataList[[1]]$person.id
[1] 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214
如何将更改应用于列表中每个数据框中的每个列名称 person.id?
我想要的是在列表中的每个数据框中填充零:
> dataList[[1]]$person.id
[1] 003200 003201 003202 003203 003204 003205 003206 003207 003208
[10] 003209 003210 003211 003212 003213 003214
【问题讨论】:
-
你也可以在
lapply中使用sprintf("%06d", i$person.id)代替str_pad -
我使用过 sprintf 并看到它有多快,但对于我的数据集,它低于 50,000 条记录,我不需要提高速度。好建议!