楼主: maiweijie4321
1760 18

[问答] 问题是这样的:一个数据框了又多个变量(列)假设有n列,我现在想按n-1列去找,保留第 [推广有奖]

11
maiweijie4321 发表于 2018-4-19 09:22:30
qoiqpwqr 发表于 2018-4-18 20:28
没看懂你要表达的意思。如果你是想要保留那些变量1是“不正常”的行的话,你可以这样做。

dat
2f738bd4b31c8701f85b3e4f267f9e2f0608ffae.jpg

2f738bd4b31c8701f85b3e4f267f9e2f0608ffae.jpg (72.07 KB)

想得到这样结果

想得到这样结果

12
maiweijie4321 发表于 2018-4-19 09:24:11
菊花冰糖水 发表于 2018-4-19 09:15
那就是参考前面那楼的代码,可以把数据集中所有变量1为“不正常”的全部提取出来
2f738bd4b31c8701f85b3e4f267f9e2f0608ffae.jpg

13
maiweijie4321 发表于 2018-4-19 09:34:24
菊花冰糖水 发表于 2018-4-19 09:06
题目表达不太清晰,按照你说的问题理解的话,那就是像楼上的方法,简单直接的抽取这些行
这里的“字段3”就是开头说的“变量1”

14
maiweijie4321 发表于 2018-4-19 09:34:43
qoiqpwqr 发表于 2018-4-18 20:28
没看懂你要表达的意思。如果你是想要保留那些变量1是“不正常”的行的话,你可以这样做。

dat
这里的“字段3”就是开头说的“变量1”

15
qoiqpwqr 发表于 2018-4-19 10:30:05
  1. > dat <- data.frame(v1 = c("str1", "str2", "str3"), v2 = 1:3, v3 = 2:4)
  2. > dat <- dat[c(1, 1, 2, 2, 2, 3, 3), ]
  3. > dat <- data.frame(dat, v4 = runif(7))
  4. > dat
  5.       v1 v2 v3          v4
  6. 1   str1  1  2 0.003486396
  7. 1.1 str1  1  2 0.192452135
  8. 2   str2  2  3 0.315792834
  9. 2.1 str2  2  3 0.738911704
  10. 2.2 str2  2  3 0.528803896
  11. 3   str3  3  4 0.034219540
  12. 3.1 str3  3  4 0.788516396
复制代码

现在你的dat数据框里的有一些重复的行(v4这个变量无所谓,就像你前面的例子里的变量三一样),可以用
  1. > dup.index <- duplicated(subset(dat, select = -c(v4)))
  2. > dup.index
  3. [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE
复制代码

把那些重复的行数找出来,然后用
  1. > newdat
  2.     v1 v2 v3          v4
  3. 1 str1  1  2 0.003486396
  4. 2 str2  2  3 0.315792834
  5. 3 str3  3  4 0.034219540
复制代码

把重复的行都去掉了
已有 1 人评分论坛币 收起 理由
cheetahfly + 20 热心帮助其他会员

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

16
maiweijie4321 发表于 2018-4-19 14:10:16
qoiqpwqr 发表于 2018-4-19 10:30
现在你的dat数据框里的有一些重复的行(v4这个变量无所谓,就像你前面的例子里的变量三一样),可以用

...
先多谢。
但是,正像你举的例子那样V4变量,我这里V4变量就只取“正常”或者“不正常”,现在的问题是,去掉重复的一些行(这些行除了在V4变量处取值不同,其它都相同),我要指定保留V4=“不正常”的那些行,而不是随机保留哪行

17
maiweijie4321 发表于 2018-4-19 14:20:36
qoiqpwqr 发表于 2018-4-19 10:30
现在你的dat数据框里的有一些重复的行(v4这个变量无所谓,就像你前面的例子里的变量三一样),可以用

...
你这里的V4都是保留重复行第一个值,我这边的V4是一个因子,只有“正常”、“不正常”,在去掉重复的一些行之后只保留“不正常”所对应的行。去重的你做对了,但在V4取值上我还是没有得到想要的效果。希望师兄再指点下

18
qoiqpwqr 发表于 2018-4-19 19:44:55
  1. > dat <- data.frame(v1 = c("str1", "str2", "str3"), v2 = 1:3, v3 = 2:4)
  2. > dat <- dat[c(1, 1, 2, 2, 2, 3, 3), ]
  3. > dat <- data.frame(dat, v4 = c("Yes", "No", "No", "Yes", "No", "No", "Yes"), stringsAsFactors = FALSE)
  4. > dat
  5.       v1 v2 v3  v4
  6. 1   str1  1  2 Yes
  7. 1.1 str1  1  2  No
  8. 2   str2  2  3  No
  9. 2.1 str2  2  3 Yes
  10. 2.2 str2  2  3  No
  11. 3   str3  3  4  No
  12. 3.1 str3  3  4 Yes
  13. >
  14. > dat2 <- subset(dat, select = -c(v4))
  15. > dup.index <- duplicated(dat2) | duplicated(dat2, fromLast = TRUE)
  16. > no.index <- (dat$v4 == "No")
  17. > newdat <- dat[dup.index & no.index, ]
  18. > newdat
  19.       v1 v2 v3 v4
  20. 1.1 str1  1  2 No
  21. 2   str2  2  3 No
  22. 2.2 str2  2  3 No
  23. 3   str3  3  4 No
复制代码

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
maiweijie4321 + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

19
maiweijie4321 发表于 2018-4-20 12:21:42
qoiqpwqr 发表于 2018-4-19 19:44
太感谢啦!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:59