我需要先按行拆分数据帧,现在我有一个包含65个数据帧的庞大列表。
df_list = split(df, list(df$group))
new_col_name = c("A", "B","group")
df_list = lapply(df_list, setNames, nm=new_col_name)
df_list = lapply(df_list, function(x) x[-1,])
我想将A列(在列表中的所有数据帧中)转换为因子而不是数字。
>head(df_list)
$`0`
A B count
.3375E+03 .5295E+00 0
.3380E+03 .4412E+00 0
.3385E+03 .0123E+00 0
$`1`
A B count
.3370E+03 .4939E+00 1
.3375E+03 .5295E+00 1
.3380E+03 .5679E+00 1
$`2
A B count
.3370E+03 .4934E+00 2
.3375E+03 .5286E+00 2
.3380E+03 .5673E+00 2
等
这是一些可重现的数据(为了简单起见,我将第一个变量转换为一个因子)。
test = data.frame(A = c(".3375E+03", ".3380E+03", ".3385E+03"),
B = c(.5295E+00 , .4412E+00, .0123E+00),
C = c(0,0,0))
我尝试了以下内容:
for (i in df_list){
i$A = as.numeric(as.character(i$A))
}
但不知何故,这实际上并未分配给df_list:
> str(df_list[[1]])
'data.frame': 549 obs. of 3 variables:
$ A : Factor w/ 551 levels ".3370E+03",".3375E+03",..: 2 3 4 5 6 7 8 9 10 11 ...
使用apply()
或sapply()
可能有办法实现,但我无法理解。
答案 0 :(得分:1)
使用for(i in ...)
,每个i
都是元素的副本。您只需分配副本,但不会影响原始副本。要引用特定对象,最好使用名称或索引。因此,让代码正常工作的方法是:
for (i in seq_along(df_list)) {
df_list[[i]]$A = as.numeric(as.character(df_list[[i]]$A))
}