R 如何使用sapply将行添加到数据帧?
我试图在sappy函数调用中向数据框添加行,但它返回一个矩阵,而我希望数据框的列中包含变量,行中包含名称/地址 这是一个证明问题的简单示例。我这样做是为了避免使用“for”循环。有人能教我该怎么做吗R 如何使用sapply将行添加到数据帧?,r,sapply,R,Sapply,我试图在sappy函数调用中向数据框添加行,但它返回一个矩阵,而我希望数据框的列中包含变量,行中包含名称/地址 这是一个证明问题的简单示例。我这样做是为了避免使用“for”循环。有人能教我该怎么做吗 # initialize and empty data frame absdf <- data.frame( name = character(), address = character(), city = character(), stringsAsFac
# initialize and empty data frame
absdf <- data.frame(
name = character(),
address = character(),
city = character(),
stringsAsFactors=FALSE)
# a numeric vector.
idvs <- c(123, 465)
print("initial empty data frame:")
print(absdf)
absdf <- sapply(idvs, function(idv) {
name <- paste("John Doe", idv)
address <- "123 Main St."
city <- "Elmhurst"
absdf <- rbind(absdf, data.frame(
name = name,
address = address,
city = city,
stringsAsFactors=FALSE))
})
# print it out - a sanity check
print("absdf final:")
print(absdf)
sapply
正试图将结果简化为矩阵,但您并没有得到预期的输出
从应用中的“simplify”参数:
逻辑或字符串;
结果应该简化为向量、矩阵还是更高
如果可能的话,三维数组
由于sapply
是lappy
的包装器,为了简化输出,请尝试直接使用lappy
创建数据帧
常用的函数calldo.call(rbind,)
组合了列表中的元素
absdf <- lapply(idvs, function(idv) {
name <- paste("John Doe", idv)
address <- "123 Main St."
city <- "Elmhurst"
data.frame(
name = name,
address = address,
city = city,
stringsAsFactors=FALSE)
})
do.call(rbind, absdf)
# name address city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst
absdfsapply
试图将结果简化为矩阵,而您没有得到预期的输出
从应用中的“simplify”参数:
逻辑或字符串;
结果应该简化为向量、矩阵还是更高
如果可能的话,三维数组
由于sapply
是lappy
的包装器,为了简化输出,请尝试直接使用lappy
创建数据帧
常用的函数calldo.call(rbind,)
组合了列表中的元素
absdf <- lapply(idvs, function(idv) {
name <- paste("John Doe", idv)
address <- "123 Main St."
city <- "Elmhurst"
data.frame(
name = name,
address = address,
city = city,
stringsAsFactors=FALSE)
})
do.call(rbind, absdf)
# name address city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst
absdf@RichardScriven我认为最好避免使用包装器,而不是使用它,然后取消它的效果。最好直接跳到data.frame,嗯data.frame(name=paste(“John Doe”,idvs),address=“123 Main St.”,city=“Elmhurst”,stringsAsFactors=FALSE)
@Frank我同意这种情况,但为了演示所描述的效果,问题很可能过于简化了。谢谢Pierre,这就是我所寻找的解决方案!我会接受你的回答,等我知道怎么做的时候。是的,这个问题是真实问题的简化版本。注意,我不得不将它稍微修改为:absdf@RichardScriven我认为最好避免使用包装器,而不是使用它,然后取消它的效果。最好直接跳到data.frame,嗯data.frame(name=paste(“John Doe”,idvs),address=“123 Main St.”,city=“Elmhurst”,stringsAsFactors=FALSE)
@Frank我同意这种情况,但为了演示所描述的效果,问题很可能过于简化了。谢谢Pierre,这就是我所寻找的解决方案!我会接受你的回答,等我知道怎么做的时候。是的,这个问题是真实问题的简化版本。注意,我不得不将它稍微修改为:absdf
absdf <- lapply(idvs, function(idv) {
name <- paste("John Doe", idv)
address <- "123 Main St."
city <- "Elmhurst"
data.frame(
name = name,
address = address,
city = city,
stringsAsFactors=FALSE)
})
do.call(rbind, absdf)
# name address city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst