2017-01-25 3 views
0

私のRコードに問題があります。最初は、データフレーム(df)が1つの列にあり、数値とベクトルで構成されています。これらのベクトルには数値も含まれています。あなたには、いくつかの行(6,8 & 9)を含有するベクター要素が見ることができるリストで行のベクトル値のみを連結する

1. 60011000 
2. 60523000 
4. 60490000 
5. 60599000 
6. c("60741000", "60740000", "60742000") 
7. 60647000 
8. c("60766000", "60767000") 
9. c("60563000", "60652000") 

:これは、データフレームの一部の行の例です。私はベクトル内の要素を1つの要素に連結したい。 例えばライン6のベクトルからの結果は、次のようになります

そしてライン8の結果は、この

ようになります

私のデータフレームには30,000以上の行がありますので、手動で行うことはできません。

問題を解決するのに手伝ってもらえますか?行数が変更されないことが重要です。 大変ありがとうございました。私はネイティブスピーカーではありません。

+2

ようこそStackOverflowへ。これらのヒントを見て、[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法と[Rの素晴らしい例を作成する]( http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。おそらく、[良い質問をする]のヒント(http://stackoverflow.com/help/how-to-ask)も読む価値があるかもしれません。 – lmo

+1

こんにちはCM2893、その列の構造は何ですか?それらの行は文字ですか?彼らがなければならないと私は想像する!私はあなたがベクトルを持っているとは思わない、文字通り 'c( "60741000"、 "60740000"、 "60742000")という文字列があると思う。 – Joy

+0

こんにちはJoy、私は構造を出力するために次のコードを使用しました:sapply(df、class)と結果はlistでした。だから、あなたはベクトルではないあなたの権利です。 @ジョイ –

答えて

0

あなたは行うことができます:

df=data.frame(a=c(1,2,3,4,'c("60741000", "60740000", "60742000")'), 
       b=c(1,2,3,4,5), 
       stringsAsFactors = F) 
> df 
             a b 
1          1 1 
2          2 2 
3          3 3 
4          4 4 
5 c("60741000", "60740000", "60742000") 5 
df[,"a"]=sapply(df[,"a"],function(x) paste(eval(parse(text=x)),collapse = "")) 
> df 
         a b 
1      1 1 
2      2 2 
3      3 3 
4      4 4 
5 607410006074000060742000 5 
1

データを:

dat <- read.table(text='60011000 
60523000 
60490000 
60599000 
c("60741000", "60740000", "60742000") 
60647000 
c("60766000", "60767000") 
c("60563000", "60652000")', sep = "\t") 

dat 
#        V1 
# 1      60011000 
# 2      60523000 
# 3      60490000 
# 4      60599000 
# 5 c(60741000, 60740000, 60742000) 
# 6      60647000 
# 7   c(60766000, 60767000) 
# 8   c(60563000, 60652000) 

あなたは空の文字列で、すべての数字以外の文字を置き換えるためにgsubを使用することができます。

dat$V1 <- gsub("[^0-9]+", "", dat$V1) 

dat 
#       V1 
# 1     60011000 
# 2     60523000 
# 3     60490000 
# 4     60599000 
# 5 607410006074000060742000 
# 6     60647000 
# 7   6076600060767000 
# 8   6056300060652000 
+0

@ CM2893ようこそ! –

0

ここに移動します。 (誰かがパンチに私を打つように見える)

df <- read.table("df.txt",header=F,) 
df 
# V1 
# 1    123 
# 2    12 
# 3 c("1","55","6") 
# 4    356 
# 5 c("99","55","3") 
df[,1] <- as.numeric(as.character(gsub("[^0-9]","",df[,1]))) 
df 
# V1 
# 1 123 
# 2 12 
# 3 1556 
# 4 356 
# 5 99553 
関連する問題