R 清理HTML表,从下一行值中添加列,然后删除该行

R 清理HTML表,从下一行值中添加列,然后删除该行,r,dataframe,rvest,R,Dataframe,Rvest,我已经将一个带有rvest的HTML表刮到了一个数据框中,但是我需要清理它以满足我的需要。我不确定我是应该作为刮取的一部分来做这件事,还是作为数据处理的一部分来清理它 我需要的是在第一行中添加一列,其中的值来自第二行。然后完全删除第二行。如果有意义的话,对每个奇数/偶数行重复上述步骤 这是刮伤的样子: n = c("Player 1", "Male", "Player 2", "Female") s = c(1,

我已经将一个带有rvest的HTML表刮到了一个数据框中,但是我需要清理它以满足我的需要。我不确定我是应该作为刮取的一部分来做这件事,还是作为数据处理的一部分来清理它

我需要的是在第一行中添加一列,其中的值来自第二行。然后完全删除第二行。如果有意义的话,对每个奇数/偶数行重复上述步骤

这是刮伤的样子:

n = c("Player 1", "Male", "Player 2", "Female") 
s = c(1, "Male", 5, "Female") 
b = c(1, "Male", 5, "Female") 
df1 = data.frame(n, s, b) 
这是我希望它看起来的样子:

n = c("Player 1", "Player 2") 
s = c(1, 5) 
b = c(1, 5) 
v = c("Male", "Female")
df1 = data.frame(n, s, b, v) 
试试这个

# First, split the dataframe by odd/even rows.
# Then, cbind odd (TRUE) and even (FALSE) rows; 
# only need the first column of every even row because all columns have the same value.

with(
  split(df1, seq_len(nrow(df1)) %% 2L == 1L), 
  as.data.frame(cbind(`TRUE`, v = `FALSE`[[1L]]))
)
输出

         n s b      v
1 Player 1 1 1   Male
3 Player 2 5 5 Female
试试这个

# First, split the dataframe by odd/even rows.
# Then, cbind odd (TRUE) and even (FALSE) rows; 
# only need the first column of every even row because all columns have the same value.

with(
  split(df1, seq_len(nrow(df1)) %% 2L == 1L), 
  as.data.frame(cbind(`TRUE`, v = `FALSE`[[1L]]))
)
输出

         n s b      v
1 Player 1 1 1   Male
3 Player 2 5 5 Female
这是否有效:

> library(dplyr)
> df1 %>% mutate(v = lead(b)) %>% filter(row_number() %in% seq(1,nrow(df1), 2))
         n s b      v
1 Player 1 1 1   Male
2 Player 2 5 5 Female
这是否有效:

> library(dplyr)
> df1 %>% mutate(v = lead(b)) %>% filter(row_number() %in% seq(1,nrow(df1), 2))
         n s b      v
1 Player 1 1 1   Male
2 Player 2 5 5 Female

这是完美的,简单的解释和工作的第一次,非常感谢。如何将新数据框中的行重置为1,2,3,4,5。。。。而不是1,3,5,7,9…?尝试
row.names(你的新的)这是完美的,简单的解释,第一次工作,非常感谢。如何将新数据框中的行重置为1,2,3,4,5。。。。代替1,3,5,7,9…?尝试
row.names(你的新的_df)另一个伟大的解决方案,简单且与我所追求的一模一样。另一个伟大的解决方案,简单且与我所追求的一模一样。