Hi!
Hope someone can help me figure out probably a pretty simple problem! I have a data set where I have a column called ‘Time’ and ‘Trial’. The time is recorded from the first trial in 4ms increments. I want to transform the ‘Time’ column so each trial begins with time 0. For that, I am trying to get the first-row value in column ‘Time’ for every trial in 144 trials and subtract that first value from each subsequent time value separately for each trial. I hope I make sense, I am more than happy to elaborate, but it should look something like this:
I tried: groupby(loaddata, :Trial), :Time =>loaddata[:, :Time] .- loaddata[:1, :Time]
but it is probably very far from the right answer!
Thank you to anyone who can help me with this problem!!
try
grouped = groupby(loaddata, :Trial)
newdf = transform(grouped, :Time => (t -> t .- first(t)), renamecols=false)
If you don’t want to have that extra variable hanging around you could do it using Chain.jl like
newdf = @chain loaddata begin
groupby(:Trial)
transform(:Time => first)
select(:Time_first)
.-(loaddata.:Time, _)
end
Note that if your data is not sorted on :Time
you may want to use minimum
instead of first
1 Like
Thank you so much for your reply! I’ll try this! I’m very new to Julia and was looking for this solution for a while, I’ll look up all functions too! I assume I can also make a new variable in my data frame that will nest the transformed time?
if you want the adjusted time to be a new variable, then you can just omit the renamecols=false
part, as by default that line will create a new column called :Time_first
. you can also use the Pair
syntax to customize the name, like so
transform(grouped, :Time => (t -> t .- first(t)) => :AdjTime)
. Just be very sure you put those parentheses around the lambda! in Julia, =>
has higher precedence than ->
.
For the second way, that actually just returns the new column itself, so you could modify loaddata
in place like
loaddata[!, :AdjTime] = @chain loaddata begin
groupby(:Trial)
transform(:Time => first)
select(:Time_first)
.-(loaddata.:Time, _)
end