Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在r中的一个变量中组合两个值?_R - Fatal编程技术网

如何在r中的一个变量中组合两个值?

如何在r中的一个变量中组合两个值?,r,R,我有一个变量“国家” df 这就是我想要的 df id age country new 1 21 Denmark 1 2 20 Sweden 2 3 20 Sweden 2 4 21 NA 0 5 22 Other 0 我希望丹麦编码为1,瑞典编码为2,NA+其他编码为0。如何在r中执行此操作?这应该可以: library(dplyr) library(tibble) df <- tibble::tribble( ~d, ~

我有一个变量“国家”

df

这就是我想要的

df
id age  country new
1  21   Denmark  1
2  20   Sweden   2
3  20   Sweden   2
4  21   NA       0
5  22   Other    0
我希望丹麦编码为1,瑞典编码为2,NA+其他编码为0。如何在r中执行此操作?

这应该可以:

library(dplyr)
library(tibble)
df <- tibble::tribble(
  ~d, ~age, ~country, 
  1, 21, "Denmark", 
  2, 20, "Sweden",  
  3, 20, "Sweden",  
  4, 21, NA,
  5, 22, "Other")
df <- df %>% mutate(new = case_when(
  country == "Sweden" ~2, 
  country == "Denmark" ~ 1, 
  TRUE ~ 0))
  
df
# # A tibble: 5 x 4
#      d   age country   new
#   <dbl> <dbl> <chr>   <dbl>
# 1     1    21 Denmark     1
# 2     2    20 Sweden      2
# 3     3    20 Sweden      2
# 4     4    21 NA          0
# 5     5    22 Other       0
库(dplyr)
图书馆(tibble)

df这将是一种使用datatable的方法:

library(data.table)
library(dplyr)

df <- setDT(df)

df <- df[,`:=`(
  new = case_when(
    country == "Sweden" ~1, 
    country == "Denmark" ~ 2, 
    TRUE ~ 0)
)]
库(data.table)
图书馆(dplyr)

df这里有一个
base
R方法:

corr <- data.frame(country = c("Denmark", "Sweden", NA_character_, "Other"),
                   new = c(1, 2, 0, 0))

merge(df, corr, by = "country")
corr合并(df,corr,by=“country”)
国家id新时代
1丹麦1211
2其他5 22 0
3瑞典2 20 2
4瑞典3 20 2
5      4  21   0
数据:

df <- structure(list(id = 1:5, age = c(21L, 20L, 20L, 21L, 22L), country = c("Denmark", 
                                                                             "Sweden", "Sweden", NA, "Other")), class = "data.frame", row.names = c(NA, 
                                                                                                                                                    -5L))

df请尝试分享可复制的示例和预期输出。不确定您的数据帧的结构,但看看这是否有效:df$Country\u代码我尝试过,但这是我第一次,所以我不知道如何正确发布df。您的代码工作正常,但NA没有标记为0,仍然是NA。您可以使用dput(df)。谢谢!但是,NA仍然是NA:(@Quinn不知道为什么,它在我的代码中起作用。你能编辑你的问题以添加你尝试过的内容和结果吗?对不起,我输入了错误。它起作用了!:)非常感谢!:)
> merge(df, corr, by = "country")
  country id age new
1 Denmark  1  21   1
2   Other  5  22   0
3  Sweden  2  20   2
4  Sweden  3  20   2
5    <NA>  4  21   0
df <- structure(list(id = 1:5, age = c(21L, 20L, 20L, 21L, 22L), country = c("Denmark", 
                                                                             "Sweden", "Sweden", NA, "Other")), class = "data.frame", row.names = c(NA, 
                                                                                                                                                    -5L))