gpt4 book ai didi

r - lapply 中的矩阵赋值失败

转载 作者:行者123 更新时间:2023-12-04 10:10:32 25 4
gpt4 key购买 nike

我有一个包含字符数据的 data.frame,我希望最终得到一个具有相同列标题但每个值都有计数的矩阵。到目前为止,我可以获得一个我想要的维度的空矩阵,但是当我尝试用计数填充 myMatrix 时,它不起作用。

myData <- data.frame(a=LETTERS[5:8], b=LETTERS[6:9], c=rep(LETTERS[5:6],2), d=rep(LETTERS[7],4))
# a b c d
# 1 E F E G
# 2 F G F G
# 3 G H E G
# 4 H I F G
myValues <- sort(unique(unlist(myData))) # E F G H I
myList <- lapply(myData, table)
myMatrix <- matrix(nrow=length(myValues), ncol=length(myList), dimnames=list(myValues,names(myList)))
# a b c d
# E NA NA NA NA
# F NA NA NA NA
# G NA NA NA NA
# H NA NA NA NA
# I NA NA NA NA

到目前为止一切顺利。这是不符合我预期的部分:

lapply(seq_along(myList), function(i) {myMatrix[names(myList[[i]]),names(myList[i])] <- myList[[i]]})

它返回正确的值,但 myMatrix 仍然充满 NA。奇怪的是,这个有效:

myMatrix[names(myList[[2]]),names(myList[2])] <- myList[[2]]
# a b c d
# E NA NA NA NA
# F NA 1 NA NA
# G NA 1 NA NA
# H NA 1 NA NA
# I NA 1 NA NA

为什么对 myMatrix 的赋值在 lapply 中失败,我如何才能让它工作(没有 for 循环)?

最佳答案

这是一种将返回 data.frame 的方法

# create table, convert to data.frames then give appropriate column names
myList <- Map(setNames, lapply(lapply(myData, table), data.frame), Map(c, 'Var', names(myList)))
# merge recursively
Reduce(function(...) merge(..., by = 'Var', all = T), myList)
Var a b c d
1 E 1 NA 2 NA
2 F 1 1 2 NA
3 G 1 1 NA 4
4 H 1 1 NA NA
5 I NA 1 NA NA

关于r - lapply 中的矩阵赋值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735525/

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