2017-03-28 11 views
1

共通の文字列に基づいて1つの変数に結合する必要のある複数の変数名があります。私のサンプルデータは、次のとおりです。私は新しい変数xを作成したいと思いますR他の変数名と文字列を部分一致させて新しい変数名を作成

structure(list(And = c(10L, NA, 10L), and = c(20L, 10L, 10L), 
andbc = c(1L, NA, NA), baNdc = c(4L, NA, 5L), ban = c(1L, 
NA, 1L)), .Names = c("And", "and", "andbc", "baNdc", "ban"), class = "data.frame", row.names = c(NA, -3L)) 

、の値は、ケースを無視して、共通のテキスト文字列「と」共有する他の変数の値の行和になりますその文字列中のいずれかの文字の

私は避けるように願ってい順列を、指定して変数を作成しようとしました:

names1[, 1:5][is.na(names1[, 1:5])] <- 0 
names1$x <- sum(names1[which(grepl("And|and|aNd", names(names1)))]) 

私は、xの値のために得る結果が満たす変数のすべての値の合計でありますテキスト文字列基準:

structure(list(And = c(10, 0, 10), and = c(20L, 10L, 10L), andbc = c(1, 0, 0), baNdc = c(4, 0, 5), ban = c(1, 0, 1), x = c(70, 70, 70)), .Names = c("And", "and", "andbc", "baNdc", "ban", "x"), row.names = c(NA, -3L), class ="data.frame" 

どのように私は、テキスト文字列の基準に基づいて行の合計を取得し、上部または下部ケースの順列を指定する必要がなくなりますか?

答えて

2

次は

df <- structure(list(And = c(10L, NA, 10L), and = c(20L, 10L, 10L), 
      andbc = c(1L, NA, NA), baNdc = c(4L, NA, 5L), ban = c(1L, 
                   NA, 1L)), .Names = c("And", "and", "andbc", "baNdc", "ban"), class = "data.frame", row.names = c(NA, -3L)) 

x <- rowSums(df[, grep("and", tolower(colnames(df)))], na.rm = TRUE) 
+1

'rowSums(DF [grepl( "と"、名前(DF)、の必要性のためにあなたを取り除くだろうだろうignore.case = TRUE)]、na.rm = TRUE) 'をベースにしてRに変換します。 – thelatemail

1
colnames(names1) <- tolower(colnames(names1)) 

トリックは順列

names1$x <- rowSums(names1[which(grepl('and', colnames(names1)))], na.rm = TRUE) 
+1

'(grepl(...))'は単に 'grep()'にすることができます –