2

に文字のペアのリストがありdf1ます。の現在の次元df1は 1,5 です:

df1= AC,AD,AE,AF,AG

df1(dim: 2,5)の逆の要素を含む df1 に 2 番目の行を追加します。

df1= AC,AD,AE,AF,AG
     CA,DA,EA,FA,GA

最初の行に一度に 1 つの要素にアクセスし、それぞれを文字列に変換してから逆にしたいと考えています。私は試してみましas.character(df1[1])toString(df1[1])が、どちらも"1"結果として私に与えてくれます。誰かがエラーとそれを修正する方法を説明できますか?

編集: の出力str[df1]は次のとおりです。

   'data.frame':    1 obs. of  5 variables:
     $ V1  : Factor w/ 1 level "AC": 1
     $ V2  : Factor w/ 1 level "AD": 1
     $ V3  : Factor w/ 1 level "AE": 1
     $ V4  : Factor w/ 1 level "AF": 1
     $ V5  : Factor w/ 1 level "AG": 1
4

3 に答える 3

4

正規表現でそれを行う 1 つの方法を次に示します。

df1 <- read.csv(text = "AC,AD,AE,AF,AG", header = FALSE) # your data frame

tmp <- sapply(df1, as.character) # a character vector

matrix(c(tmp, sapply(df1, sub, pattern = "(.)(.)", replacement = "\\2\\1")), 
       2, byrow = TRUE)

結果:

     [,1] [,2] [,3] [,4] [,5]
[1,] "AC" "AD" "AE" "AF" "AG"
[2,] "CA" "DA" "EA" "FA" "GA"

結果は行列です。でデータフレームに変換できますas.data.frame

于 2013-06-07T16:40:58.187 に答える
1

それが最も簡単な方法であるかどうかはわかりませんが、これが機能する 1 つのアプローチです。最初のステップは、data.frame

dat <- Reduce(data.frame,
              c("AC", "AD", "AE", "AF", "AG"))
names(dat) <- paste0("V", 1:ncol(dat))
str(dat)

## 'data.frame':    1 obs. of  5 variables:
##  $ V1: Factor w/ 1 level "AC": 1
##  $ V2: Factor w/ 1 level "AD": 1
##  $ V3: Factor w/ 1 level "AE": 1
##  $ V4: Factor w/ 1 level "AF": 1
##  $ V5: Factor w/ 1 level "AG": 1

最後のステップでは、文字列のベクトルを反転してデータに適用する関数を作成します。

str_rev <- function(string)
    paste(rev(unlist(strsplit(string, ""))), collapse = "")

str_rev <- Vectorize(str_rev, USE.NAMES = FALSE)


rbind(dat,
      t(apply(dat, 1, str_rev))
      )

##   V1 V2 V3 V4 V5
## 1 AC AD AE AF AG
## 2 CA DA EA FA GA
于 2013-06-07T16:41:03.913 に答える
1

一般に、as.matrix は適切な強制方法です。

df <- data.frame(matrix(c("AC","AD","AE","AF","AG"), nrow=1))
df
X1 X2 X3 X4 X5
1 AC AD AE AF AG

sapply(df, function(x) paste(rev(strsplit(as.matrix(x), "")[[1]]), collapse=""))
  X1   X2   X3   X4   X5
"CA" "DA" "EA" "FA" "GA"

それは答えますか?

于 2013-06-07T16:40:51.077 に答える