gpt4 book ai didi

r - 将零填充到列表中所有数据框中的一列

转载 作者:行者123 更新时间:2023-12-03 23:44:51 25 4
gpt4 key购买 nike

我有一个包含四个数据框的列表。每个数据框都有相同的第一列 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 的函数需要返回完整的数据帧。您使用的函数只返回赋值的结果,它只是列的值,而不是整个数据框。您还需要保存结果。这里我们使用 transform 作为修改数据框的函数,并使用 person.id 参数修改 person.id 列(参见 ?transform):

df.pad <- lapply(dataList, transform, person.id=str_pad(person.id, 6, pad = "0"))

然后,df.pad[[1]]:产生:

[[1]]
person.id letter
1 003200 a
2 003201 b
3 003202 c
4 003203 d
5 003204 e
6 003205 f
7 003206 g
8 003207 h
9 003208 i
10 003209 j
11 003210 k
12 003211 l
13 003212 m
14 003213 n
15 003214 o

您需要返回数据框,因为 R 不是一种按引用分配的语言。您在 lapply 中对 i 的赋值只是修改了 i 的本地副本,而不是在 dataList 中的数据帧全局环境。如果你想修改 dataList,你可以用 dataList 替换上面表达式中的 df.pad,这将导致 dataList 被包含修改后的数据帧的新版本覆盖。

关于r - 将零填充到列表中所有数据框中的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com