我有这种情况:
foo <- data.frame("vars" = c("animal: mouse | wks: 12 | site: cage | PI: 78",
"animal: dog | wks: 32 | GI: 0.2",
"animal: cat | wks: 8 | site: wild | PI: 13"))
其中变量名和相对数据存储在字符串中,如上例所示。特别是,每个variable_name/its_data单元由|
分隔。在之后:
是相对数据。
我想要一个这样的最终数据帧:
animal wks site PI GI
mouse 12 cage 78 NA
dog 32 <NA> NA 0.2
cat 8 wild 13 NA
下面是一个dplyr
解决方案:
library(dplyr)
library(tidyr)
tibble(foo) %>%
mutate(row = row_number()) %>%
separate_rows(vars, sep = '\\|') %>%
separate(vars, c("a", "b"), sep = '\\:') %>%
mutate(across(everything(), str_trim)) %>%
group_by(a) %>%
pivot_wider(names_from = a, values_from = b) %>%
type.convert(as.is = TRUE) %>%
select(-row)
animal wks site PI GI
<chr> <int> <chr> <int> <dbl>
1 mouse 12 cage 78 NA
2 dog 32 NA NA 0.2
3 cat 8 wild 13 NA
另一个使用Reduce
merge
type.convert(
Reduce(
function(x, y) merge(x, y, all = TRUE),
lapply(
strsplit(foo$vars, ":|\\|"),
function(x) {
m <- matrix(trimws(x), 2)
setNames(data.frame(m[2, , drop = FALSE]), m[1, ])
}
)
),
as.is = TRUE
)
给予
animal wks site PI GI
1 cat 8 wild 13 NA
2 dog 32 <NA> NA 0.2
3 mouse 12 cage 78 NA
下面是一种使用scan()
行方式,然后使用merge
。
lapply(1:nrow(foo), \(x)
scan(text=foo[x, ], what=character(), sep='|', strip.white=T, qui=T) |>
(\(.) do.call(rbind, strsplit(., ': ')))() |>
(\(.) setNames(data.frame(t(.[, 2])), .[, 1]))()) |>
(\(.) Reduce(\(...) merge(..., all=TRUE), .))()
# animal wks site PI GI
# 1 cat 8 wild 13 <NA>
# 2 dog 32 <NA> <NA> 0.2
# 3 mouse 12 cage 78 <NA>
注:R
我有以下格式的数据。向量的第一个元素指的是标题,向量的第二个到底部指的是针对标题的值。我希望以表格/结构化格式(或带有标题和值的数据框)放置数据。
问题内容: MySQL中有什么方法可以将数据库名称放入变量中?例如,当我有一个名为“ db1”的数据库时,可以执行以下操作: 编辑:还有一个我想做的例子: 问题答案: 付出了很大的努力,是的。
如果变量名称存储在字符向量中,如何引用中的变量?例如,这适用于: 如何对数据执行相同的操作。表,带或不带符号?显然不起作用(我也没想到它会起作用)。
我有3个数据帧。第一数据帧(例如df1)具有多行和多列。第二和第三数据帧(例如df2和df3)仅具有来自DF1的一行和列的子集。df2和df3中的列名相同。所以我要做的是将df1中的每一行与df2和DF3中的单行进行比较。如果来自df1的单元格的值与df2的单元格内容匹配,则将df1中单元格的值替换为1;如果来自df1的单元格的值与df3匹配,则将df1中单元格的值替换为2;如果df2的单元格内容
问题内容: 是否可以选择名称为字符串的字段? 我需要这个来让触发器具有像这样的动态字段名称 问题答案: 如果该字符串在您的外部应用程序(如PHP)中,请确保构造MySQL语句。 如果字符串在MySQL表中,则不能。MySQL没有或没有这样的功能。以下是不可能的: 假设您有一个表,其中的字段引用该表中的列名之一。可能会有其他列允许您选择所需的列。 但是,您可以使用PREPARED STATEMENT
我的问题如下,我有一个Spring Boot应用程序,我使用Jooq for sql,我设置我的pom来生成表。数据库信息设置在环境变量中。它在Intellij内部运行良好,但当我生成。WAR并在客户端上上传应用程序只有当客户端库名与创建jooq代码时我pom.xml中的名称相同时,才有效。表完全一样,唯一可以改变的是库名,所以我在环境变量中查找名称信息。我的变量都设置在属性中,在调试中,我可以看