2014-01-08 6 views
9

センサスデータを扱っているので、4つの文字列を1つの列に結合する必要があります。複数の文字列をRデータフレームの1つの列に結合する方法

例:

LOGRECNO STATE COUNTY TRACT BLOCK 
    60 01 001 021100 1053 
    61 01 001 021100 1054 
    62 01 001 021100 1055 
    63 01 001 021100 1056 
    64 01 001 021100 1057 
    65 01 001 021100 1058 

私は一緒に単一の文字列に州、郡、管、およびBLOCKの文字列を追加する新しい列を作成します。例:私が試した

LOGRECNO STATE COUNTY TRACT BLOCK BLOCKID 
    60 01 001 021100 1053 01001021101053 
    61 01 001 021100 1054 01001021101054 
    62 01 001 021100 1055 01001021101055 
    63 01 001 021100 1056 01001021101056 
    64 01 001 021100 1057 01001021101057 
    65 01 001 021100 1058 01001021101058 

AL_Blocks$BLOCK_ID<- paste(c(AL_Blocks$STATE, AL_Blocks$County, AL_Blocks$TRACT, AL_Blocks$BLOCK), collapse = "") 

しかし、これは単一の文字列にすべての4つの列のすべての行を兼ね備えています。

答えて

8

このお試しください:郡のタイプミスがあった

AL_Blocks$BLOCK_ID<- with(AL_Blocks, paste0(STATE, COUNTY, TRACT, BLOCK)) 

を...それはCOUNTYしてきたはずです。また、折り畳みパラメータは必要ありません。

私は役立つことを願っています。

11

do.callpaste0を使用できます。試してみてください:

AL_Blocks$BLOCK_ID <- do.call(paste0, AL_Block[c("STATE", "COUNTY", "TRACT", "BLOCK")]) 

出力例: "AL_Blocksは" として提供され

library(tidyr) 
library(dplyr) 
AL_Blocks %>% 
    unite(BLOCK_ID, STATE, COUNTY, TRACT, BLOCK, sep = "", remove = FALSE) 
# LOGRECNO  BLOCK_ID STATE COUNTY TRACT BLOCK 
# 1  60 010010211001053 01 001 021100 1053 
# 2  61 010010211001054 01 001 021100 1054 
# 3  62 010010211001055 01 001 021100 1055 
# 4  63 010010211001056 01 001 021100 1056 
# 5  64 010010211001057 01 001 021100 1057 
# 6  65 010010211001058 01 001 021100 1058 

:あなたはまた、このように、 "tidyr" からuniteを使用することができます

do.call(paste0, AL_Blocks[c("STATE", "COUNTY", "TRACT", "BLOCK")]) 
# [1] "010010211001053" "010010211001054" "010010211001055" "010010211001056" 
# [5] "010010211001057" "010010211001058" 
do.call(paste0, AL_Blocks[2:5]) 
# [1] "010010211001053" "010010211001054" "010010211001055" "010010211001056" 
# [5] "010010211001057" "010010211001058" 

AL_Blocks <- structure(list(LOGRECNO = c("60", "61", "62", "63", "64", "65"), 
    STATE = c("01", "01", "01", "01", "01", "01"), COUNTY = c("001", "001", 
    "001", "001", "001", "001"), TRACT = c("021100", "021100", "021100", 
    "021100", "021100", "021100"), BLOCK = c("1053", "1054", "1055", "1056", 
    "1057", "1058")), .Names = c("LOGRECNO", "STATE", "COUNTY", "TRACT", 
    "BLOCK"), class = "data.frame", row.names = c(NA, -6L)) 
3

またはこの

DF$BLOCKID <- 
    paste(DF$LOGRECNO, DF$STATE, DF$COUNTY, 
     DF$TRACT, DF$BLOCK, sep = "") 

を試してみてください(ここでは、この後の議論に入って来る人々のためのデータフレームを設定するためのメソッドがある)

DF <- 
    data.frame(LOGRECNO = c(60, 61, 62, 63, 64, 65), 
      STATE = c(1, 1, 1, 1, 1, 1), 
      COUNTY = c(1, 1, 1, 1, 1, 1), 
      TRACT = c(21100, 21100, 21100, 21100, 21100, 21100), 
      BLOCK = c(1053, 1054, 1055, 1056, 1057, 1058)) 
+0

私は80列ありますが、A [、2:82]のような列名を渡す方法は、それが私の人生を大きくするだろうからです。より簡単に? –

+0

@kRazzyR、このソリューションは私の54のコラムで動作します。 iris $ full < - 適用(iris [、1:5]、1、paste、collapse = "〜") 例:apply(A [、2:82 ]、1、paste、collapse = "")。セパレータは折りたたみパラメータで指定できます。 – Yimihua

3

あなたも

AL_Blocks <- transform(All_Blocks, BLOCKID = paste(STATE,COUNTY, 
         TRACT, BLOCK, sep = "") 
0
これを試すことができます

あなたはぴったりのパッケージを使用できます

関連する問題