Regex 在R中将数据帧元素转换为字符串
我在Regex 在R中将数据帧元素转换为字符串,regex,string,r,type-conversion,Regex,String,R,Type Conversion,我在df1中有一个字母对列表。df1的当前维度为1,5: df1= AC,AD,AE,AF,AG 我想向df1添加第二行,其中包含df1(dim:2,5)的反向元素,即: 我希望每次访问第一行一个元素,将每个元素转换为字符串,然后将其反转。我尝试了as.character(df1[1])和toString(df1[1]),但它们都给了我“1”。 有人能解释一下这个错误吗?我怎样才能改正它 编辑: str[df1]的输出为: 'data.frame': 1 obs. of 5 va
df1
中有一个字母对列表。df1
的当前维度为1,5:
df1= AC,AD,AE,AF,AG
我想向df1添加第二行,其中包含df1
(dim:2,5)的反向元素,即:
我希望每次访问第一行一个元素,将每个元素转换为字符串,然后将其反转。我尝试了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
一般来说,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"
df这里有一种使用正则表达式的方法:
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)
结果是一个矩阵。它可以用as.data.frame
转换成一个数据帧,但不确定这是最简单的方法,但这里有一种有效的方法
第一步是创建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
dat你能告诉我str(df1)
的结果是什么吗?R代码在语法上是无效的。请提供实际工作的R代码和示例。另请参见strsplit
、Crrl+F和搜索strReverse
。
[,1] [,2] [,3] [,4] [,5]
[1,] "AC" "AD" "AE" "AF" "AG"
[2,] "CA" "DA" "EA" "FA" "GA"
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