【发布时间】:2020-03-22 14:21:36
【问题描述】:
我有一个相当大的数据框,我正在使用 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 没有太多经验。
【问题讨论】:
-
split(Crime_US, rep(states_vec, each = 31)) -
我真的很想用这个,不幸的是数据框在状态之间有 9 个空白行,所以看起来只有第一个小标题是正确的。不过谢谢你
-
split(Crime_US[!is.na(Crime_US$Year), ], rep(states_vec, each = 31)) -
哦,伙计,我真的很喜欢您的解决方案,我希望我知道自己做错了什么,但这对我不起作用。不过感谢您的帮助。