R 因为循环行为怪异
我有两个数据帧:R 因为循环行为怪异,r,for-loop,R,For Loop,我有两个数据帧: df_1 <- data.frame(c("a_b", "a_c", "a_d")) df_2 <- data.frame(matrix(ncol = 2)) 但我得到的却是: col1 col2 a b a c a d a c NA NA a d 我一定是做错了什么事,但我想不出来。 我还想使用apply(或类似的东西,但我对R很陌生,对apply家族不太熟悉) 谢谢你的帮助!另一种方法是 df_1 <-
df_1 <- data.frame(c("a_b", "a_c", "a_d"))
df_2 <- data.frame(matrix(ncol = 2))
但我得到的却是:
col1 col2
a b
a c
a d
a c
NA NA
a d
我一定是做错了什么事,但我想不出来。
我还想使用apply(或类似的东西,但我对R很陌生,对apply家族不太熟悉)
谢谢你的帮助!另一种方法是
df_1 <- data.frame(col1 = c("a_b", "a_c", "a_d"))
df_2 <- as.data.frame(do.call(rbind, strsplit(as.character(df_1$col1), split = "_", fixed = TRUE)))
df_2[rep(1:nrow(df_2), each = 2), ]
V1 V2
1 a b
1.1 a b
2 a c
2.1 a c
3 a d
3.1 a d
df_1好的,我本周开始学习R,但是如果您想要呈现结果,您可以将您的代码用于此修复:
for (i in (1:(length(df_1[,1])))){
for (j in (1:2)) {
df_2[(i-1)*2+j,] <- str_split_fixed(df_1[i,1], "_", 2)
}
}
for(i in(1:(长度(df_1[,1]))){
对于(j in(1:2)){
df_2[(i-1)*2+j,]这将是两个答案的组合。使用cSplit
我们将列按拆分,然后每行重复两次。假设您的列名为V1
library(splitstackshape)
df_2 <- cSplit(df_1, "V1", "_")
df_2[rep(seq_len(nrow(df_2)),each = 2), ]
# V1_1 V1_2
#1: a b
#2: a b
#3: a c
#4: a c
#5: a d
#6: a d
数据
df_1 <- data.frame(V1 = c("a_b", "a_c", "a_d"))
dfu 1我们可以将cSplit
与数据一起使用
library(splitstackshape)
cSplit(df_1, 'col1', '_')[rep(seq_len(.N), each =2)]
# col1_1 col1_2
#1: a b
#2: a b
#3: a c
#4: a c
#5: a d
#6: a d
或者另一个选项是tidyverse
library(tidyverse)
separate(df_1, col1, into=c("col_1", "col_2")) %>%
map_df(~rep(., each = 2))
# A tibble: 6 × 2
# col_1 col_2
# <chr> <chr>
#1 a b
#2 a b
#3 a c
#4 a c
#5 a d
#6 a d
库(tidyverse)
分离(df_1,col1,into=c(“col_1”,“col_2”))%>%
map_df(~rep(,每个=2))
#一个tibble:6×2
#第1列第2列
#
#1 a b
#2 a b
#3 a c
#4 a c
#公元5年
#公元6年
注:两个答案都是一行
数据
df_1我试图发布一个在发布后立即找到的解决方案,但被误解并被删除:
“有时发布问题有助于:
我要求在df_1中找到正确的位置,但我将结果保存在错误的单元格中
我最初问题的答案应该是这样的:
n <- 1
for (i in (1:(length(df_1[,1])))){
for (j in (1:2)) {
df_2[n,] <-str_split_fixed(df_1[i,1], "_", 2)
n <- n+1
}
}"
n你有df_2[i*j,]
,但是5是一个素数,所以你永远不会填写df_2[5,]
,除非i>=5
read.table(text=rep(df_1[,1],each=2),sep=''u',col.names=paste0('col',1:2))
一个完整的splitstackshape的可能的副本将是expandRows(cSplit)(df_1,“V1”,“V1”),2,count.is.col=FALSE)
从技术上讲,包调用每行增加一行,但从技术上讲,它们每行增加数百行:}
library(splitstackshape)
cSplit(df_1, 'col1', '_')[rep(seq_len(.N), each =2)]
# col1_1 col1_2
#1: a b
#2: a b
#3: a c
#4: a c
#5: a d
#6: a d
library(tidyverse)
separate(df_1, col1, into=c("col_1", "col_2")) %>%
map_df(~rep(., each = 2))
# A tibble: 6 × 2
# col_1 col_2
# <chr> <chr>
#1 a b
#2 a b
#3 a c
#4 a c
#5 a d
#6 a d
df_1 <- data.frame(col1 = c("a_b", "a_c", "a_d"))
n <- 1
for (i in (1:(length(df_1[,1])))){
for (j in (1:2)) {
df_2[n,] <-str_split_fixed(df_1[i,1], "_", 2)
n <- n+1
}
}"