1

对不起,我什至在这项任务的最基本部分都失败了。我有一个 50 长的字符串列表,并且我初始化了一个 25 长的空向量,但即使手动将一个的第一个元素分配给另一个的第一个元素也失败了:

> p$key
 [1] CA TX NY FL IL PA OH MI GA NC NJ VA MA WA IN AZ TN MO MD WI MN CO AL SC LA KY OR
[28] OK CT IA MS AR KS UT NV NM WV NE ID ME NH HI RI MT DE SD AK ND VT WY
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI ... WY
> st <- character(25)
> st[1] <- p$key[1]
> st[1]
[1] "5"
> p$key[1]
[1] CA
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI ... WY
>

对不起,我太密集了,你能指出我在这里不知道的地方吗?谢谢 - 教育局

4

3 回答 3

6

p$key是 a factor,所以st[1] = as.character(p$key[1])改为这样做。

假设您想要字符列表,这将为您提供拆分:

odds = as.character(p$key[seq(1,50,2)])
evens = as.character(p$key[seq(2,50,2)])
于 2013-04-10T20:27:34.533 回答
3

尝试这个:

> key <- factor(state.abb)
> key
 [1] AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT
[27] NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME ... WY

如果您想要每个替代值并希望保留所有因子水平,请使用:

> split(key, 1:length(key) %% 2 == 0)
$`FALSE`
 [1] AL AZ CA CT FL HI IL IA KY ME MA MN MO NE NH NM NC OH OR RI SD TX VT WA WI
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME ... WY

$`TRUE`
 [1] AK AR CO DE GA ID IN KS LA MD MI MS MT NV NJ NY ND OK PA SC TN UT VA WV WY
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME ... WY

如果您更喜欢将输出作为字符值,请使用:

> split(as.character(key), 1:length(key) %% 2 == 0)
$`FALSE`
 [1] "AL" "AZ" "CA" "CT" "FL" "HI" "IL" "IA" "KY" "ME" "MA" "MN" "MO" "NE" "NH"
[16] "NM" "NC" "OH" "OR" "RI" "SD" "TX" "VT" "WA" "WI"

$`TRUE`
 [1] "AK" "AR" "CO" "DE" "GA" "ID" "IN" "KS" "LA" "MD" "MI" "MS" "MT" "NV" "NJ"
[16] "NY" "ND" "OK" "PA" "SC" "TN" "UT" "VA" "WV" "WY"

更新

如果您更喜欢单独的向量而不是列表,请尝试:

stOdds <- key[1:length(key) %% 2 == 1]
stEvens <- key[1:length(key) %% 2 == 0]
于 2013-04-10T20:31:51.393 回答
3

这将返回所有其他元素。第一个返回从第一个开始的所有其他元素,第二个返回一个从第二个开始的向量。

>  key <- factor(state.abb)
> key[c(TRUE, FALSE)]
 [1] AL AZ CA CT FL HI IL IA KY ME MA MN MO NE NH NM NC OH OR RI SD TX VT WA WI
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV ... WY
> key[c(FALSE,TRUE)]
 [1] AK AR CO DE GA ID IN KS LA MD MI MS MT NV NJ NY ND OK PA SC TN UT VA WV WY
50 Levels: AK AL AR AZ CA CO CT DE FL GA HI IA ID IL IN KS KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV ... WY

正如其他人已经指出的那样,使用 as.character() 将转换为没有所有那些令人分心的级别的非因素对象。

于 2013-04-10T23:07:12.387 回答