r - R制作数据框列表
问题描述
我有一个相当大的数据框,我正在使用 slice() 将其切成我需要的部分。我尝试编写一个我认为可以完成我想做的事情的函数。这就是我最初做事的方式:
Alabama <- slice(Crime_US, 1:31)
Alaska <- slice(Crime_US, 40:70)
Arizona <- slice(Crime_US, 79:109)
Arkansas <- slice(Crime_US, 118:148)
California <- slice(Crime_US, 156:186)
这是阿拉巴马州的一些输出:
Year Population `Violent crime to… `Murder and nonneglige… `Legacy rape /1` `Revised rape /… Robbery `Aggravated assa…
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1970 3444165 10185 404 637 NA 1731 7413
2 1971 3479000 10835 524 661 NA 2005 7645
3 1972 3510000 10994 496 660 NA 2407 7431
4 1973 3539000 12390 468 751 NA 2809 8362
5 1974 3577000 13338 536 811 NA 3562 8429
6 1975 3614000 14201 577 738 NA 4446 8440
这就是我想做的。这是一些需要澄清的代码。
Crime_US <- read_excel("crimeAllStates.xlsx", skip=9)
states_vec <- c("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "D.C.", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennslyvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming")
counter <- 1
m <- 1
n <- 31
makeMyStates <- function(df) {
states_vec[counter] <- slice(df, m:n)
counter <- (counter + 1)
m <- (m + 39)
n <- (n + 39)
}
sapply(Crime_US, makeMyStates)
不幸的是,我收到了这个错误:
Error in UseMethod("slice_") : no applicable method for 'slice_' applied to an object of class "character"
我尝试用谷歌搜索错误无济于事,而且我对 R 没有太多经验。
解决方案
m
如果您必须根据and中的值诉诸任意中断n
,我认为尝试填充列表可能会有所帮助。
您的行:states_vec[counter] <- slice(df, m:n)
正在尝试使用数据框填充字符向量,这就是您收到此错误的原因。
带有列表的 for 循环可能是解决此问题的一种方法(尽管它不是很整洁):
state_crime <- list()
m <- 1
n <- 31
for (i in 1:length(states_vec)){
state_crime[[i]] <- slice(Crime_US, m:n) %>%
mutate(state = states_vec[i])
m <- (m + 39)
n <- (n + 39)
}
然后使用states_vec
列表命名列表中的每个元素,或者只是绑定行以创建一个新的数据框。
names(state_crime) <- states_vec
bind_rows(state_crime)
推荐阅读
- javascript - 在单击反应时,数组未在 setState 中清除为 null 或为空
- node.js - 无法验证 Gupshup WhatsApp API 上的回调
- powershell - Powershell Get-Job 文件名或扩展名太长
- android - Flutter中如何使用文本字段数据并通过api调用计算?
- sql - 将父级与多个子级连接后合并重复的 SQLite 列
- regex - 除了您指定的内容之外,最简单的 REGEX 捕获所有内容的方法是什么?
- amazon-web-services - 带有 AWS S3 存储桶的 Mulesoft S3 连接器
- keras - tf.keras.datasets.imdb.load_data 的问题
- python - 如何在使用openCV python播放时移动视频窗口
- ubuntu - 为什么在 vagrant box ubuntu/bionic64 上安装 nodejs 时“哈希和不匹配”