r - 如何从R中的另一个数据框中提取数据框
问题描述
我正在使用合并的 df 并用于summarise(n = count(var))
了解重复项。然后我得到了这个对象调用x
:
n.x n.freq
1 001121011522 1
2 001121711014 1
3 001121711015 1
4 001121711722 1
5 001121711723 1
6 001131811722 1
我知道n.freq
从 1 到 6,所以我只想抓住那些大于或等于 2 的:
y <- x %>% filter(n$freq >= 2)
但我得到了这个:
Error: Column `n` must be a 1d atomic vector or a list
Call `rlang::last_error()` to see a backtrace
所以我检查了它的结构并得到了这个:
> str(x)
'data.frame': 485843 obs. of 1 variable:
$ n:'data.frame': 485843 obs. of 2 variables:
..$ x : Factor w/ 485843 levels "001121011522",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ freq: int 1 1 1 1 1 1 1 1 1 1 ...
所以它看起来有一个 df 在另一个里面我可以理解。我想知道如何提取第二个(内部)df 来使用它。
[更新]:使用dput(head(x, 20))
我得到:
"ABC253478", "ABC983659", "ABC654911", "ABC882310",
..... # there were at least 100 rows of results
"ABC665892", "ABC441276", "ABC906138", "ABC679967"
), class = "factor"), freq = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), row.names = c(NA,
20L), class = "data.frame")), row.names = c(NA, 20L), class = "data.frame")
解决方案
这些数据一定有什么奇怪的东西……但是让我们看看我是否可以尝试复制是否足够。(预先说明:不完美,但我们还没有足够的信息来改进这么多。)
一些示例数据,手动编写以模拟我认为您缺少的行是:
x <- structure(
list(n = structure(
list(x = structure(c(3L, 7L, 6L, 2L, 10L, 9L, 1L, 8L, 4L, 5L),
.Label = c("112916", "116806", "118489", "146802", "154999",
"157333", "170238", "183345", "194348", "194384"),
class = "factor"),
freq = c(2L, 1L, 3L, 1L, 2L, 3L, 3L, 1L, 2L, 1L)),
class = "data.frame", row.names = c(NA, -10L) ) ),
class = "data.frame", row.names = c(NA, -10L)
)
str(x)
# 'data.frame': 10 obs. of 1 variable:
# $ n:'data.frame': 10 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 7 6 2 10 9 1 8 4 5
# ..$ freq: int 2 1 3 1 2 3 3 1 2 1
这不会复制您的错误:
str( x %>% filter(n$freq >= 2) )
# 'data.frame': 6 obs. of 1 variable:
# $ n:'data.frame': 6 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# ..$ freq: int 2 3 2 3 3 2
也许这对你有用?
str( subset(x, n$freq >= 2) )
# 'data.frame': 6 obs. of 1 variable:
# $ n:'data.frame': 6 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# ..$ freq: int 2 3 2 3 3 2
不幸的是,这可能对您有用,但会导致数据库扁平化(无意):
str( x[ x$n$freq >= 2, ] )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
看起来这个嵌套框架很容易解开:
str( x[[1]] )
# 'data.frame': 10 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 7 6 2 10 9 1 8 4 5
# $ freq: int 2 1 3 1 2 3 3 1 2 1
因此,让我们尝试用“正常”的框架替换嵌套框架:
xflat <- x[[1]]
str( filter(xflat, freq >= 2) )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
str( subset(xflat, freq >= 2) )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
str( xflat[ xflat$freq >= 2, ] )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
推荐阅读
- docker - 我如何告诉 Jhipster 我的 docker 守护进程在不同的 IP 地址上运行
- python - .py 不从内容文件夹中读取
- javascript - github 在哪里存储您输入的评论?
- mysql - Delphi代码不会保存到Mysql数据库
- python - aws 实例上的 Randint
- python - 使用 python 处理每个用户一行中的数据
- c# - 将大文件加载到 RichTextBox 时的性能问题
- sql - SQL Server 不接受分数
- sql - 在 bigquery 中比较多个大型数据集的重复项
- java - 如何从 Java 中的 Http Get 请求中获取 JSON 列表?