我有以下数据集:
observation <- c(1:10)
pop.d.rank <- c(1:10)
cost.1 <- c(101:110)
cost.2 <- c(102:111)
cost.3 <- c(103:112)
all <- data.frame(observation,pop.d.rank,cost.1, cost.2, cost.3)
Run Code Online (Sandbox Code Playgroud)
我想在三年内分配以下金额:
annual.investment <- 500
Run Code Online (Sandbox Code Playgroud)
我可以使用以下脚本在第一年执行此操作:
library(dplyr)
all <- all %>%
mutate(capital_allocated.5G = diff(c(0, pmin(cumsum(cost), annual.investment)))) %>%
mutate(capital_percentage.5G = capital_allocated.5G / cost * 100) %>%
mutate(year = ifelse(capital_percentage.5G >= 50, "Year.1",0))
Run Code Online (Sandbox Code Playgroud)
但是当我第二年尝试这样做时,考虑到前一年的投资,代码不起作用.这是我尝试在mutate循环中放置一个ifelse语句,以便它不会覆盖前一年分配的钱:
all <- all %>%
mutate(capital_allocated.5G = ifelse(year == 0, diff(c(0, pmin(cumsum(cost), annual.investment))), 0) %>%
mutate(capital_percentage.5G = capital_allocated.5G / cost * 100) %>%
mutate(year = ifelse(capital_percentage.5G >= 50, "Year.2",0)) …Run Code Online (Sandbox Code Playgroud) 我已经使用了排列和变异组合来根据分组进行添加。例如,我使用了以下内容:
master_df <-group_by(master_df,asof_dt)
mutate(master_df,tot_flag=ls_flag)
Run Code Online (Sandbox Code Playgroud)
这将我的数据框 master_df 按 asof_dt 分组,然后创建 tot_flag 并按日期添加 ls_flag。
但是,我的 ls_flag 列包含 NA。
我想做以下事情:1) 找出如何添加 ls_flag,忽略任何 NA 2) 找出如何添加每天 NA 的总数。
这是完整的示例:
asof_dt<-c("2014-10-01","2014-10-01","2014-10-01","2014-10-02","2014-10-02","2014-10-02")
ls_flag<-c(1,1,NA,NA,1,1)
master_df<-data.frame(asof_dt,ls_flag)
master_df <-group_by(master_df,asof_dt)
mutate(master_df,tot_flag=sum(ls_flag))
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我希望使用年份列表按日期过滤数据库
years<-c("2014")
yearsdata <- data.frame(animal=c("cow","pig"),
mydate=c(as.Date("2015-01-01"),
as.Date("2014-01-01")))
yearsdata %>%
mutate(mydate =format(mydate, "%Y") %>%
as.character()) %>%
filter(is.null(years) | mydate %in% years)
Run Code Online (Sandbox Code Playgroud)
上面的代码工作,让我过滤我的数据集,但它也格式化日期列.有没有办法获得我的过滤结果,而没有在完成的子集数据框中更改日期列的格式?
我正在尝试在mutate(). df1假设我们从一个如下所示的数据框开始,由下面的代码生成:
ID Status
1 1 N
2 2 Y
3 3 Y
4 4 N
5 5 Y
df1 <- data.frame(
ID = c(1,2,3,4,5),
Status = c("N","Y","Y","N","Y")
)
Run Code Online (Sandbox Code Playgroud)
我使用 dplyr 的mutate()函数根据最右侧“状态”列的值生成一个新列。下面是新的tmp数据帧输出和生成它的 dplyr 代码(这是一个超级简单的示例,适用于我的更大问题 - 就这样吧):
ID Status Flag
1 1 N No
2 2 Y Yes
3 3 Y Yes
4 4 N No
5 5 Y Yes
tmp <-
df1 %>%
mutate("Flag"=case_when(Status=="Y"~"Yes",TRUE~"No"))
Run Code Online (Sandbox Code Playgroud)
我试图在上面嵌入“匹配”函数的等效项mutate(),以便插入到 Flag 列中的值取决于df1数据帧中的 ID 与这两个附加数据帧中的 …
通过麻省理工学院开放课件进行Python的自学,并遇到下面这段代码的问题.当我单独或在另一个函数中运行此函数时,它会改变最初传递的值'hand',我不知道为什么.我设置了两个局部变量(hand0和tester),第一个保留初始值,第二个迭代结束.然而,所有三个都改变了,而我只是期望'测试者'这样做.除了改变'hand'之外,该函数按预期工作.
(传递给函数的值在set参数中有所不同:word_list是有效英文单词列表,word是我在此函数中替换的字符串,用于测试,hand是字母及其相关计数字典.调试代码注释掉.)
def is_valid_word(word, hand, word_list):
"""
Returns True if word is in the word_list and is entirely
composed of letters in the hand. Otherwise, returns False.
Does not mutate hand or word_list.
word: string
hand: dictionary (string -> int)
word_list: list of lowercase strings
"""
hand0 = hand
tester = hand
#display_hand(hand)
#display_hand(tester)
word = raw_input('test word: ')
length = len(word)
disc = True
for c in range(length):
if word[c] in tester.keys() and tester[word[c]]>0:
#print tester[word[c]]
#display_hand(hand)
#display_hand(tester)
tester[word[c]]=tester[word[c]]-1 …Run Code Online (Sandbox Code Playgroud)