2017-02-17 2 views
0

これは私がやろうとしていることです: 1. csvファイル を読み込みます。2.列番号107を作成し、条件に基づいて列67から値をコピーします。あなたは以下のようにベクトル化操作を使用してコードを置き換えることができますif文をデータフレーム要素に適用する

report <- read.csv("C:\\Users\\ha317981\\Desktop\\practice\\input.csv", header=1) 
for(i in 1:length(report[[70]])-1){ 
    if(report[[i, 70]] =="Yes"){ 
     report[[i,107]] <-report[[i, 67]] 
    } 
    i<- i + 1 
    } 

Error: Error in [[.default (col, i, exact = exact) : attempt to select less than one element in get1index

答えて

2

:列70における行の値は「はい」」

コードです。

report[,107] <- ifelse(report[,70] == "Yes", report[,67], NA) 
2

またifelseとペアdplyrパッケージからmutateを使用することができます。

ドキュメントから:

「変異させるには、新しい変数を追加し、既存の保存し、滴既存の変数を核変換。」

require(dplyr) 
report <- read.csv("C:\\Users\\ha317981\\Desktop\\practice\\input.csv", header=1) 

# mutate(tbl_df, NewColumn = Value, ...) 

newReport <- mutate(report, Col107 = ifelse(Col70 == "Yes", Col67, NA)) 

これは、値が列67またはNAからコピーされますいずれかの列70の値に基づいて、(おそらく?)データフレームに新しい変数を作成します。

+0

ありがとうございます! :)。私のコードに何が間違っているかを指摘できますか? –

+0

問題は、コードが1つのステートメント内の他の列と同じ長さの列を作成するのではなく、行ごとに新しい列を作成しようとしていることです。 Rのデータフレームは、すべての列の長さを同じにする必要があります(http://stackoverflow.com/questions/9253303/r-dataframe-with-varied-column-lengths)。これを修正するには、 'for'ループの前に列を追加し、行ごとに値を変更する必要があります。 'for'ループの前に' report $ Col107 = NA'を置くことでこれを行うことができます。 – JJEO

+0

が分かります。ありがとう、トン! –

関連する問題