楼主: dxystata
3401 6

[有偿编程] R中如何在x取值为0这一行上添加一行空行 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2019-10-9 22:33:54 |AI写论文
10论坛币
  1. x<-c(0,1,1,0,1,1,1,0,1,1)
  2. aaa<-data.frame(x)
复制代码


如何在数据框aaa中变量x取值为0的这一行上添加一行空行,不包括首行。得到的数据框如下:
0
1
1
.
0
1
1
1
.     
0
1
1

沙发
skyfx 发表于 2019-10-10 16:29:32

library(dplyr)
x<-c(0,1,1,0,1,1,1,0,1,1)
aaa<-data.frame(x)

a <- tbl_df(aaa) %>%
  mutate(seq = (1:length(x) * 10))

b <- a %>%
  filter(x == 0) %>%
  mutate(seq = seq - 1, x = '') %>%
  .[-1, ]

out <- a %>%
  mutate(x = as.character(x)) %>%
  full_join(b) %>%
  arrange(seq) %>%
  select(-seq)
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 3 + 3 + 3 热心帮助其他会员
dxystata + 100 + 10 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 40  学术水平 + 3  热心指数 + 4  信用等级 + 3   查看全部评分

藤椅
sunf2020 发表于 2020-2-23 16:18:18

x<-c(0,1,1,0,1,1,1,0,1,1)

hdat<-data.frame(x)

hdat<-cbind(id=1:nrow(hdat),hdat)

xk<-which(x[-1]==0)+1

sid<-hdat$id[xk]-0.1

xmid<-hdat[1:length(sid),]

xmid<-data.frame(xmid)

xmid$id<-sid

xmid[,-1]<-NA

xmid<-rbind(hdat,xmid)

sk<-order(xmid$id)

hdat<-xmid[sk,]

hdat<-hdat[,-1]



已有 1 人评分经验 论坛币 收起 理由
dxystata + 100 + 10 好的意见建议

总评分: 经验 + 100  论坛币 + 10   查看全部评分

板凳
15601804210 发表于 2020-3-31 00:52:24
sunf2020 发表于 2020-2-23 16:18
x
求大佬注释一下每一步的注释呜呜呜

报纸
煮豆燃逗比 发表于 2020-8-20 11:15:17
  1. x <- c(0,1,1,0,1,1,1,0,1,0,1,0,1,1)

  2. library(dplyr)
  3. # convert函数,如果数字为0,则变成c(NA, 0)
  4. convert <- function(num) {
  5.   if (num == 0) return(c(NA, 0))
  6.   else return(num)
  7. }
  8. # 对x中每一个数字用convert函数
  9. x <- unlist(lapply(x, convert))
  10. # 如果第一行是NA,删去第一行
  11. if (is.na(x[1])) x <- x[-1]

  12. aaa <- as.data.frame(x)  
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 + 2 + 2 + 2 精彩帖子
dxystata + 100 + 10 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 30  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

地板
ntsean 发表于 2020-8-20 13:39:59
  1. x<-c(0,1,1,0,1,1,1,0,1,1)
  2. aaa<-data.frame(x)

  3. library(dplyr)

  4. bbb <- aaa %>% mutate(.row = 1:n())

  5. aaa_new <- bbb %>%
  6.   filter(x == 0, .row > 1) %>%
  7.   mutate(.row = .row - 0.5, x = NA) %>%
  8.   bind_rows(bbb) %>%
  9.   arrange(.row) %>%
  10.   select(-.row)
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

7
tiesuoqiao 发表于 2020-8-23 09:25:23
#根本不需要dplyr或者data table
  1. x<-c(0,1,1,0,1,1,1,0,1,1)
  2. aaa<-data.frame(x)
  3. bbb<-data.frame(aaa[1,]) #bbb is the output; first add row 1 to bbb
  4. colnames(bbb)<-colnames(aaa) #get column names from aaa

  5. NewRow=c(rep(NA, ncol(aaa)))# empty row which is a vector based on number of columns in aaa
  6. for(i in 2:nrow(aaa)){
  7.   if (aaa[i,"x"]==0){
  8.     bbb=rbind(bbb,NewRow)# if column x in row i is zero, first add an empty row to bbb
  9.   }
  10.   bbb=rbind(bbb,aaa[i,]) # always add row i to bbb
  11.   
  12. }

  13. #bbb is the output
复制代码
已有 1 人评分经验 论坛币 学术水平 收起 理由
dxystata + 100 + 10 + 1 精彩帖子

总评分: 经验 + 100  论坛币 + 10  学术水平 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-18 18:58