如何解决R:用字符串匹配将特定列的行除以 df2 的列
我有一个关于两个数据框的问题。
我有这样的数据:
df1 <- data.frame(ID = c("a","b","c","d","e"),var1 = c(10,15,12,14,NA))
df2 <- data.frame(Name = c("Nr1","Nr2","Nr100","Nr76"),a_xyz = c(100,120,130,NA),b_xyz = c(150,NA,80,90),c_xyz = c(120,140),d_xyz = c(140,150,180),e_xyz = c(130,100,150))
我想(可能是一个循环)将 df2 中“a_xyz”列的每个值除以 df1“a”的值。 我想对 df2 中的每个变量执行此操作,因此我必须查找字符串匹配项以及该值是否事先存在。遗憾的是,我在 df1 和 df2 中没有相同的名称(“a”和“a_xyz”),这使得这项任务比我希望的要复杂。
最终得到的 df3 应该是这样的:
df3 <- data.frame(Name = c("Nr1",a_xyz = c(10,13,b_xyz = c(10,5.33,6),c_xyz = c(10,10,1.667),d_xyz = c(10,10.83,10.71,12.85),150))
你们能帮帮我吗?也许我想多了,这个问题有一个简单的解决方案。
在此先非常感谢您!
解决方法
试试这个。您的某些最终值不正确,因此请告诉我是否有其他计算定义。可以进行重塑和合并以达到与所需输出类似的输出:
library(dplyr)
library(tidyr)
#Code
new <- df2 %>% pivot_longer(-Name) %>%
mutate(val=name) %>%
separate(val,c('ID','V1'),sep="_") %>%
left_join(df1) %>%
mutate(Res=ifelse(!is.na(var1),value/var1,value)) %>%
select(c(Name,name,Res)) %>%
pivot_wider(names_from = name,values_from=Res)
输出:
# A tibble: 4 x 6
Name a_xyz b_xyz c_xyz d_xyz e_xyz
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Nr1 10 10 10 10 130
2 Nr2 12 NA 10 9.29 120
3 Nr100 13 5.33 NA 10.7 100
4 Nr76 NA 6 11.7 12.9 150
,
另一种解决方案是旋转 var options = {
name: document.getElementById('name').value,address_line1: document.getElementById('address-line1').value,address_line2: document.getElementById('address-line2').value,address_city: document.getElementById('address-city').value,address_state: document.getElementById('address-state').value,address_zip: document.getElementById('address-zip').value,address_country: document.getElementById('address-country').value,};
stripe.createToken(cardNumberElement,options).then(...);
,我认为这会导致一个相当干净的解决方案。
df1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。