2016-05-10 15 views
0

Google検索でうまくいく答えが見つかりませんでした。 私のデータフレームにデータが入力されていない理由がわかりません。これはシンプルなようですが、うまくいきません。誰も助けることができますか?ループ内のデータフレームにRが入力されない場合

x<- 50:1 
y<- -44:5 

theDF <- data.frame(x,y) 

# add new column 
theDF["GName"] <- 'NA' 

divToG <- function (a) 
{ 
    counter = 1 
    g_number = 1 

    # loop to populate new column 
    for (i in 1:nrow(theDF)) 
    { 
     theDF$GName[i] = paste("GName", toString(g_number)) # NOT WORKING! 
     g_number = g_number + 1 
    }  
} 

#call the function 
divToG (theDF) 

theDF$GName[i]が入力されないのはなぜですか?ループが成功した場合、列はNAの代わりにGName 1,GName 2Gname 3などでなければなりませんが、NAから変更することはできません。

+4

私はあなたを考えます "実際に 'the $ $ GName < - paste( 'GName'、1:nrow(theDF))'を実行しようとしています。ベクトル化された演算は、Rのループよりも好ましいです。 – alistaire

+0

ベクトル化する方法は?グループ1にアイテム1〜10を入れる必要があった場合、グループ2のアイテム11〜21を入れる必要があったのですか? –

+0

'paste( 'GName'、rep(1:5、each = 10))'のような意味ですか?シーケンス内にあるものに文字列を貼り付けるだけです。あなたは、あなたが望むようにシーケンスを見えるようにする必要があります。 – alistaire

答えて

2

あなたが関数内でreturnコマンドに配置する必要があります。

divToG <- function (a) 
{ 
    counter = 1 
    g_number = 1 

    # loop to populate new column 
    for (i in 1:nrow(theDF)) 
    { 
    theDF$GName[i] = paste("GName", toString(g_number)) # NOT WORKING! 
    g_number = g_number + 1 
    }  
    return(theDF) 
} 

head(divToG (theDF)) 
    x y GName 
1 50 -44 GName 1 
2 49 -43 GName 2 
3 48 -42 GName 3 
4 47 -41 GName 4 
5 46 -40 GName 5 
6 45 -39 GName 6 

よりエレガントな方法は、機能を廃止し、単に実行するために、次のようになります。

theDF$GName <- paste("GName", 1:nrow(theDF)) 
+1

'paste'はベクトル化されているので、' sapply'は必要ありません。 'paste:'に直接 '1:nrow(theDF)'を貼り付けることができます。 – alistaire

+1

が合意して編集されました。ありがとう! –

0

あなたpaste場合、単一文字列を一連の数字に変換すると、数字は文字に強制され、文字列はそれぞれに貼り付けられます。したがって、最初のステップは、:seq、または時にはsequenceを使用してシーケンスを希望通りにすることです。あなたは、グループ化変数を作成しようとしている場合は、repeachパラメータが便利です:

(ここ sep = ""paste0付き)の接頭辞に
rep(1:5, each = 3) 
# [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 

今だけpaste

paste0('GName', rep(1:5, each = 10)) 
# [1] "GName1" "GName1" "GName1" "GName1" "GName1" "GName1" "GName1" "GName1" "GName1" "GName1" 
# [11] "GName2" "GName2" "GName2" "GName2" "GName2" "GName2" "GName2" "GName2" "GName2" "GName2" 
# [21] "GName3" "GName3" "GName3" "GName3" "GName3" "GName3" "GName3" "GName3" "GName3" "GName3" 
# [31] "GName4" "GName4" "GName4" "GName4" "GName4" "GName4" "GName4" "GName4" "GName4" "GName4" 
# [41] "GName5" "GName5" "GName5" "GName5" "GName5" "GName5" "GName5" "GName5" "GName5" "GName5" 
関連する問題