如何将字符串列表拆分为R中的奇数和偶数元素

时间:2013-04-10 20:22:45

标签: string r list vector initialization

对不起,即使是这项任务中最基本的部分,我也未能成功。我有一个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
>
抱歉,我是如此密集,你能指出我在这里无知吗?谢谢 - EdB

3 个答案:

答案 0 :(得分:5)

您的p$keyfactor,而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)])

答案 1 :(得分: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]

答案 2 :(得分: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()会转换为一个非因素对象,而这个对象并没有那么多分散注意力的水平。